Простая справка по блок-схеме
-
08-07-2019 - |
Вопрос
У меня есть несколько вопросов к этой программе, первое, что я пытаюсь сделать, это сделать так, чтобы она могла сравнивать и видеть, равно ли текстовое поле позиции colorValues [x].Вторая проблема заключается в том, что оператор if говорит, что if inText == to colorValues.длина - 1, чтобы открыть окно с надписью congradulations, которое также не работает.3-я проблема, даже если он получил сообщение с сожалением и / или поздравлением, как вы можете сделать так, чтобы текстовое поле не отображалось?
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
Решение
Прежде всего, я бы посоветовал вам научиться правильно форматировать свой код, так как это значительно облегчает понимание того, что происходит.
Во-вторых, опубликованный вами код содержит синтаксические ошибки в строках 64 и 80, которые приводят к сбою компиляции.Проблема в том, что Java не позволяет вам иметь многострочные строковые литералы в исходном коде, поэтому вам нужно объединить две строки вместе.Например:
darn.namePrompt.setText("Congradulations,
Your mind is Awesome!!!");
должно быть:
darn.namePrompt.setText("Congradulations," +
" Your mind is Awesome!!!");
Теперь, к сожалению, ваш вопрос не дает особенно ясного представления о том, каким должно быть предполагаемое поведение программы.Моя интерпретация этого заключается в том, что вы хотите предоставить пользователю текстовое поле с просьбой ввести первый цвет, а затем отобразить диалоговое окно с поздравлениями или извинениями в зависимости от того, правильно ли он ответил.Если они ответят правильно, то вы хотите отобразить поле ввода для второго цвета, проверить ответ и т.д.
Мое первое предложение - создать все элементы управления при создании экземпляра JFrame, но просто скрыть остальные до тех пор, пока пользователь не введет правильное значение.Далее, я бы посоветовал вам спланировать, что будет делать прослушиватель действий, прежде чем вы войдете и напишете код.
В этом случае программе необходимо сохранить индекс массива поля ввода, над которым в данный момент работает пользователь.Затем слушателю необходимо проверить эту переменную и подтвердить соответствующее поле в массиве InputFields.Слушатель должен отобразить пользователю диалоговое окно с сообщением о том, правильно ли он ответил, и, если пользователь ответил правильно, включить следующее поле ввода.
Собрав все это вместе, вы получите вот что:
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();
}
}
Редактировать: основываясь на вашем комментарии ниже, я изменил программу, чтобы она соответствовала ожидаемому поведению.Основные изменения заключаются в том, что конструктор больше не скрывает другие элементы управления, и слушателю теперь приходится перебирать каждое поле ввода, чтобы проверить, все ли они правильные:
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();
}
}