Итак, при попытке создать генератор случайных чисел, который побуждает пользователя продолжать гадать число, сгенерированное до тех пор, пока оно не получится правильно, я столкнулся с некоторыми проблемами.Создание вложенного цикла цикла
Все работало нормально, пока я не попытался добавить игру снова. Проблема в том, что, если они угадывают неправильный номер, он бесконечно повторяет одно и то же сообщение об ошибке, независимо от того, считали ли они слишком высоким, слишком низким или если это был недопустимый ввод, непрерывно. Если число будет угадываться сразу в первый раз, все будет хорошо, и оно предложит снова играть и отлично работает.
Дело в том, я использовал 2 для петель, потому что, когда они начинают гадать, я не хочу:
«Эта программа будет генерировать случайное число от 0 до 100, которое вы должны угадать.»
Чтобы выводить каждый раз, когда они угадывают неправильный ответ, я хочу, чтобы он выводился только тогда, когда они выбирали вариант для повторного воспроизведения, поэтому я сделал вложенный цикл. Но проблема по-прежнему заключается в том, что внутренняя для цикла идет в бесконечном цикле после первого неправильного предположения, отображающего один и тот же ответ.
import javax.swing.JOptionPane;
import java.util.Random;
import javax.swing.UIManager;
import java.awt.*;
public class RandomNumberGuesser{
public static void main(String[] args){
UIManager m1=new UIManager();
Color g = Color.gray;
Color lg = g.brighter();
m1.put("OptionPane.background", lg);
m1.put("Panel.background", lg);
int x;
for(x = 1; true; x++){
Random random = new Random();
int randomNumber = random.nextInt(100);
System.out.println(randomNumber);
JOptionPane.showMessageDialog(null,
"This program will generate a random number from 0 to 100 which you have to guess.",
"Number Guesser",
JOptionPane.INFORMATION_MESSAGE);
String guess = JOptionPane.showInputDialog(null,
"Guess a number.",
"Guess",
JOptionPane.QUESTION_MESSAGE);
if(guess == null){
System.out.println("The user has terminated the program");
System.exit(0);
}
int guess1 = Integer.parseInt(guess);
int y;
for(y = 1; true; y++){
if(guess1 > 100 || guess1 < 0)
JOptionPane.showMessageDialog(null,
"Guess is out of range!\nPlease enter valid input.",
"Invalid Input",
JOptionPane.WARNING_MESSAGE);
else if(randomNumber > guess1)
JOptionPane.showMessageDialog(null,
"You guessed too low.\nGuess again!",
"Your guess",
JOptionPane.INFORMATION_MESSAGE);
else if(randomNumber < guess1)
JOptionPane.showMessageDialog(null,
"You guessed too high.\nGuess again!",
"Your guess",
JOptionPane.INFORMATION_MESSAGE);
else{
JOptionPane.showMessageDialog(null,
"You guessed the number right!\nIt took you "+y+" attempt(s) to guess it.",
"Congratulations!",
JOptionPane.INFORMATION_MESSAGE);
if (JOptionPane.showConfirmDialog(null, "Want to play again?", "Play again?",
JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) {
System.out.println("Play again soon!");
System.exit(0);
}
else{
y = 0;
break;
}
}
}
}
}
}
'for (x = 1; true; x ++) {' заставляет меня плакать, используйте 'while' для такого рода вещей. Если вы хотите выйти, просто установите некоторую переменную в значение, чтобы внешний контур знал, что он тоже должен «ломаться» (есть лучшие способы, но я думаю, что лучше начинать медленно). – SJuan76
«Перерыв» выводит вас из самой внутренней петли. Вы хотите создать несколько флагов, чтобы делать то, что вы хотите сделать (вместо простого «истинного»). – Floris
@ SJuan76 Я новичок. Я просто начинаю изучать программирование в целом. Так вы могли бы привести пример того, как он должен выглядеть? – Auxive