Frage

Ich habe ein paar Fragen zu diesem Programm, ein das erste, was ich zu tun versuche, ist es so, könnte es vergleichen und sehen, ob das Textfeld an die Farbwert gleich [x] Position. Das zweite Problem ist die if-Anweisung sagt, wenn INTEXT zu colorValues.length == - 1 eine Box zu öffnen, sagt congradulations, die funktioniert auch nicht. 3. Ausgabe, auch wenn es das tut uns leid Nachricht und oder congradulations Nachricht erhalten haben wie Sie es machen, so dass das Textfeld nicht angezeigt wird?

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;

  public class AlbertCardonaProg7 extends JFrame
 {
  private static final int WIDTH = 350;
  private static final int HEIGHT = 250;
  private static final String[] colorValues = {"red","white",
 "yellow","green","blue"};// I dentifies the colors 
  private JTextField nameBox;
  private JLabel greeting;
  private String[] message  = {"Input color number 1",
 "Input color number 2: ","Input color number 3: "
  ,"Input color number 4:","Input color number 5:"};
  private   JLabel namePrompt = new JLabel(this.message[0]);

   public AlbertCardonaProg7()
   {
   setTitle("MEMORY GAME"); 
   setSize(WIDTH, HEIGHT);
   setLayout(new FlowLayout(FlowLayout.CENTER));
   setDefaultCloseOperation(EXIT_ON_CLOSE);
   createContents();
   setVisible(true);
   }// end constructor
  //******************************************
 private void createContents()
 {
  nameBox = new JTextField(15);
  greeting = new JLabel();
  add(namePrompt);
  add(nameBox);
  add(greeting);
  nameBox.addActionListener(new Listener());
  }//end createContents

 //************************************************
private class Listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
  int inText;
  for(inText =0; inText <  5; inText++)
   {
       if(nameBox.getText().equals(colorValues[inText] ))
    {
     namePrompt.setText( message[inText]); // its not working trying 
        //to see if it is equal to the proper spot 
        //in the colorValues[array]

         add(nameBox);
         nameBox.setText("");
         nameBox.requestFocus();
         inText++;
       }

         if(!nameBox.getText().equals(colorValues[inText]))
          {
             AlbertCardonaProg7 darn = new AlbertCardonaProg7();
             darn.namePrompt.setText("Sorry, drink more Ginseng ");

             add(namePrompt);
             break;
          }

        if( inText == (colorValues.length -1))
         {
      AlbertCardonaProg7 darn = new AlbertCardonaProg7();
      darn.namePrompt.setText("Congradulations,
            Your mind is Awesome!!!");

           add(namePrompt);
           break;
        }

      }// loop
     }//end action performed
    }// end class Listener

  //**************************************
   public static void main(String[] args)
   {
      String colors = "";
      for(int i = 0; i < colorValues.length; i++)
       colors += colorValues[i] + "  ";
      JOptionPane.showMessageDialog(null,"How good is your memory.\n
      See if you can memorize this sequence.\n\n" + colors,
      "Message", JOptionPane.INFORMATION_MESSAGE );

        AlbertCardonaProg7 outBox = new AlbertCardonaProg7();

       }// end main class
      }//end Class AlberCardonaProg7
War es hilfreich?

Lösung

Zunächst einmal würde ich vorschlagen, dass Sie lernen, Ihren Code richtig formatiert werden, da sie es viel einfacher macht, um zu sehen, was los ist.

Zweitens ist der Code, den Sie geschrieben haben hat Syntaxfehler auf den Leitungen 64 und 80, die es verursachen Kompilation zum Scheitern verurteilt. Das Problem ist, dass Java erlaubt Ihnen nicht, Multi-Line-Stringliterale innerhalb des Quellcodes zu haben, so müssen Sie zusammen die zwei String verketten. Zum Beispiel:

darn.namePrompt.setText("Congradulations,
   Your mind is Awesome!!!");

sollte:

darn.namePrompt.setText("Congradulations," + 
    " Your mind is Awesome!!!");

Nun, leider Ihre Frage macht es nicht besonders klar, was das beabsichtigte Verhalten des Programms sein sollte. Meine Interpretation davon, ist, dass Sie den Benutzer mit dem Textfeld zur Verfügung stellen mögen fragt sie die erste Farbe wechseln, und dann ein Dialogfeld sagt entweder Glückwünsche oder leider, je nachdem, ob sie bekam die Antwort richtig. Wenn sie die Antwort richtig bekommen, dann wollen Sie das Eingabefeld für die zweite Farbe angezeigt werden, überprüfen Sie die Antwort, etc.

Mein erster Vorschlag ist, alle Steuerelemente zu erstellen, wenn Sie die JFrame instanziiert, sondern einfach die anderen verstecken, bis der Benutzer den richtigen Wert eingegeben hat. Ich würde nächste vorschlagen, dass Sie planen, was die Aktion Hörer tun werden, bevor Sie in gehen und den Code schreiben.

In diesem Fall muss das Programm des Array-Index des Eingabefeldes speichern, die der Benutzer gerade arbeitet. Der Hörer muss dann diese Variable überprüfen, und das entsprechende Feld in den Eingabefeldern Array zu validieren. Der Hörer muss einen Dialog angezeigt, um den Benutzer zu sagen, ob sie die Antwort richtig aufgestellt, und wenn der Benutzer hat, aktivieren Sie das nächste Eingabefeld.

Dass sie alle zusammen das Sie bekommen:

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class AlbertCardonaProg7 extends JFrame {
    private static final int WIDTH = 350;
    private static final int HEIGHT = 250;
    private static final String[] colorValues = { "red", "white", "yellow",
        "green", "blue" };

    private final JLabel[] inputLabels = new JLabel[colorValues.length];
    private final JTextField[] inputFields = new JTextField[colorValues.length];
    private int index = 0;

    public AlbertCardonaProg7() {
        //Create the UI controls
        for (int i = 0; i < colorValues.length; i++) {
            inputLabels[i] = new JLabel("Input color number " + i + ":");
            inputLabels[i].setVisible(false);
            inputFields[i] = new JTextField(15);
            inputFields[i].setVisible(false);
            inputFields[i].addActionListener(new Listener());

            add(inputLabels[i]);
            add(inputFields[i]);
        }

        //Make the first set visible
        inputLabels[0].setVisible(true);
        inputFields[0].setVisible(true);

        setTitle("MEMORY GAME");
        setSize(WIDTH, HEIGHT);
        setLayout(new FlowLayout(FlowLayout.CENTER));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    private class Listener implements ActionListener {
        public void actionPerformed(ActionEvent e) {

            if (inputFields[index].getText().equals(colorValues[index])) {
                JOptionPane.showMessageDialog(null, "Congratulations, you got the answer correct");

                //See if there are more controls to make visible
                if (++index < colorValues.length) {
                    inputLabels[index].setVisible(true);
                    inputFields[index].setVisible(true);
                }
            } else {
                JOptionPane.showMessageDialog(null,
                        "Sorry, your answer is wrong", "Error",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    public static void main(String[] args) {
        String colors = "";
        for (int i = 0; i < colorValues.length; i++) {
            colors += colorValues[i] + "  ";
        }

        JOptionPane.showMessageDialog(null, "How good is your memory.\n"
                + "See if you can memorize this sequence.\n\n" + colors,
                "Message", JOptionPane.INFORMATION_MESSAGE);

        AlbertCardonaProg7 outBox = new AlbertCardonaProg7();

    }
}

Edit: basierend auf Ihren Kommentar unten, ich habe das Programm modifiziert, um das erwartete Verhalten gerecht zu werden. Die wichtigsten Änderungen sind der Konstruktor nicht mehr die anderen Kontrollen versteckt, und der Hörer hat jetzt über jedes Eingabefeld Schleife zu überprüfen, sie sind alle richtig:

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class AlbertCardonaProg7 extends JFrame {
    private static final int WIDTH = 350;
    private static final int HEIGHT = 250;
    private static final String[] colorValues = { "red", "white", "yellow",
        "green", "blue" };

    private final JLabel[] inputLabels = new JLabel[colorValues.length];
    private final JTextField[] inputFields = new JTextField[colorValues.length];

    public AlbertCardonaProg7() {
        //Create the UI controls
        for (int i = 0; i < colorValues.length; i++) {
            inputLabels[i] = new JLabel("Input color number " + i + ":");
            inputFields[i] = new JTextField(15);
            inputFields[i].addActionListener(new Listener());

            add(inputLabels[i]);
            add(inputFields[i]);
        }

        setTitle("MEMORY GAME");
        setSize(WIDTH, HEIGHT);
        setLayout(new FlowLayout(FlowLayout.CENTER));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    private class Listener implements ActionListener {
        public void actionPerformed(ActionEvent e) {

            // See if there are any wrong answers
            boolean correct = true;
            for(int i = 0; i < colorValues.length; i++) {
                if (!inputFields[i].getText().equals(colorValues[i])) {
                    correct = false;
                }
            }

            if(correct) {
                JOptionPane.showMessageDialog(null, 
                        "Congratulations, you got the answer correct");
            } else {
                JOptionPane.showMessageDialog(null,
                        "Sorry, your answer is wrong", "Error",
                        JOptionPane.ERROR_MESSAGE);

            }
        }
    }

    public static void main(String[] args) {
        String colors = "";
        for (int i = 0; i < colorValues.length; i++) {
            colors += colorValues[i] + "  ";
        }

        JOptionPane.showMessageDialog(null, "How good is your memory.\n"
                + "See if you can memorize this sequence.\n\n" + colors,
                "Message", JOptionPane.INFORMATION_MESSAGE);

        AlbertCardonaProg7 outBox = new AlbertCardonaProg7();

    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top