Ваша проблема в том, что ваше мышление выключено и его необходимо изменить. Не думайте «петля», а на самом деле выходите из уравнения. Вы программируете в среде программирования, управляемой событиями, и цикл, о котором вы думаете, принадлежит к линейной среде программирования консоли. Вместо этого подумайте «состояние объекта» и «поведенческие изменения в состояниях изменений», и вы будете двигаться гораздо дальше в этом задании. Так измените состояние своего класса - количество догадок, количество правильных догадок, а затем измените ответ на вход пользователя на основе этого состояния.
Например, если вы хотите создать консольную программу, которая позволила бы пользователю чтобы ввести 5 строк, а затем отобразить эти строки для пользователя, это будет довольно прямолинейно, поскольку вы создадите массив String, а затем используйте цикл for, чтобы пригласить пользователя 5 раз ввести текст, захватив каждый введите String в цикле. Здесь «петли», как тот, который вы запрашиваете.
Линейная консоль Программа
import java.util.Scanner;
public class Enter5Numbers1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter 5 sentences:");
String[] sentences = new String[5];
for (int i = 0; i < sentences.length; i++) {
System.out.printf("Enter sentence #%d: ", (i + 1));
sentences[i] = scanner.nextLine();
}
System.out.println("You entered the following sentences:");
for (String sentence : sentences) {
System.out.println(sentence);
}
scanner.close();
}
}
Если с другой стороны, вы хотите создать графический интерфейс, который сделал что-то подобное, что побудило пользователя на 5 строк и принял эти строки в массив , вы не могли бы использовать один и тот же тип цикла. Вместо этого вам нужно будет дать вашему классу счетчик строк String, возможно, названный enterSentenceCount, и в ActionListener (или Action) JButton, который является чем-то очень похожим), вы должны принять введенную строку (возможно, набрав JTextField с именем entryField) только если значение введенногоСентента меньше 5, меньше максимального количества разрешенных строк. Разумеется, вы должны увеличивать значение введенной переменной SentenceCount каждый раз, когда вводится String. И эта комбинация увеличения переменной счетчика и проверки ее значения должна будет основываться на концепции «петли». Итак, здесь «состояние» класса удерживается в файле введенного значения, и поведенческое изменение, которое мы хотим, это изменить то, что делает действие кнопки в зависимости от значения введенного значения - если оно меньше 5, принять строку, и если она равна или больше 5, отобразите введенные строки.
Event Driven GUI Программа
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class Enter5Numbers2 extends JPanel {
private static final int MAX_SENTENCE_COUNT = 5; // number of Strings to enter
private static final String PROMPT_TEMPLATE = "Please enter sentence number %d:";
private String[] sentences = new String[MAX_SENTENCE_COUNT]; // array to hold entered Strings
private int enteredSentenceCount = 0; // count of number of Strings entered
private JTextField entryField = new JTextField(20); // field to accept text input frm user.
// JLabel to display prompts to user:
private JLabel promptLabel = new JLabel(String.format(PROMPT_TEMPLATE, (enteredSentenceCount + 1)));
public Enter5Numbers2() {
// create GUI
// First create Action/ActionListener for button
EntryAction entryAction = new EntryAction("Enter");
JButton entryButton = new JButton(entryAction); // pass it into the button
entryField.setAction(entryAction); // but give it also to JTextField so that the enter key will trigger it
// JPanel to accept user data entry
JPanel entryPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
entryPanel.add(entryField);
entryPanel.add(entryButton);
// allow main JPanel to display prompt
setBorder(BorderFactory.createTitledBorder("Please Enter 5 Sentences"));
setLayout(new GridLayout(2, 1));
add(promptLabel);
add(entryPanel);
}
// Action class, similar to an ActionListener
private class EntryAction extends AbstractAction {
public EntryAction(String name) {
super(name);
putValue(MNEMONIC_KEY, (int) name.charAt(0));
}
@Override
public void actionPerformed(ActionEvent e) {
// check that we haven't entered more than the max number of sentences
if (enteredSentenceCount < MAX_SENTENCE_COUNT) {
// if OK, get the entered text
String sentence = entryField.getText();
// put it in our array
sentences[enteredSentenceCount] = sentence;
entryField.setText(""); // clear the text field
entryField.requestFocusInWindow(); // set the cursor back into the textfield
enteredSentenceCount++; // increment our entered sentence count variable
promptLabel.setText(String.format(PROMPT_TEMPLATE, (enteredSentenceCount + 1))); // change prompt
}
// if the number of sentences added equals the number we want, display it
if (enteredSentenceCount == MAX_SENTENCE_COUNT) {
JTextArea textArea = new JTextArea(6, 30);
for (String sentence : sentences) {
textArea.append(sentence + "\n");
}
JScrollPane scrollPane = new JScrollPane(textArea);
JOptionPane.showMessageDialog(Enter5Numbers2.this, scrollPane, "Five Sentences Entered",
JOptionPane.PLAIN_MESSAGE);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Enter 5 Numbers");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(new Enter5Numbers2());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
Можете ли вы быть более конкретным, что вы думаете, что не так? Вы разместили здесь много кода – bhooks
@bhooks В принципе, я хочу, чтобы все в классе «KeyInput» зацикливалось, чтобы пользователь мог вводить несколько раз, но я не могу понять, где я могу поместить цикл. Когда я пытаюсь, я получаю несколько ошибок и не могу понять, как их избежать. Как я уже сказал, я новичок в java, поэтому я не хочу разрушать свой код, делая то, что я не понимаю. – User9123
Ваша проблема в том, что ваше мышление выключено и должно быть изменено. Не думайте «петля», а на самом деле выходите из уравнения. Вы программируете в среде программирования, управляемой событиями, и цикл, о котором вы думаете, принадлежит к линейной среде программирования консоли.Вместо этого подумайте «состояние объекта» и «поведенческие изменения в состояниях изменений», и вы будете двигаться гораздо дальше в этом задании. Поэтому измените состояние своего класса - количество догадок, количество правильных догадок, а затем измените ответ на вход пользователя на основе этого состояния. –