我正在尝试制作一个非常基本的游戏,您可以使用do循环猜测1-1000之间的数字。一切正常,除了当我最终做出正确的猜测时,我仍然会被提示做出另一个猜测,当我再次输入相同的正确猜测时,程序会像预期的那样终止。
为什么我必须做出额外的猜测才能最终让我的程序运行起来?我是不是多绕一圈?此外,如果我做出了正确的猜测(编译器会说我是正确的,然后仍然提示我),然后是错误的猜测(编译程序会告诉我我错了),然后又是正确的猜测,只有在我第二次做出正确的猜测后,程序才会终止。
底部的第二个do循环是我在主方法中放入的内容。上面的一切都是我写的一种方法,叫做play。
public static boolean play()
{
boolean c;
int n = 0;
do {
String input = JOptionPane.showInputDialog("Enter a number between 1-1000");
n = Integer.parseInt(input);
if (n == guess)
{
System.out.println("Correct");
c = true;
}
else if (n < guess)
{
System.out.println("Not Right");
c = false;
}
else
{
System.out.println("Not Right");
c = false;
}
guess++;
} while (c == false);
return c;
}
主要方法:
do {
game1.play();
} while (game1.play() != true);
此循环在循环的每次迭代中运行播放方法两次:
do {
game1.play(); // first call
} while (game1.play()!=true); // second call
您没有测试第一次调用返回的值,因此即使它返回true,您仍然会再次调用game1.play()
,它将再次显示"输入1-1000之间的数字"。
替换为:
boolean done = false;
do {
done = game1.play();
} while (!done);
这将在循环的每次迭代中只调用play()
一次。
也就是说,我不知道你为什么需要外环。您只需将中替换为对game1.play()
的一次调用,因为game1.play()
将循环直到输入正确的号码。