我试图制作一个“密码破解者”。用户尝试猜测随机密码(4位整数) 程序会提示输入的密码是否太低/太高/相等。但是我被困住了,我不知道为什么我的循环不会结束。
public static void main(String[] args) {
int password = 1234;
startGame(checkNumber(loadNumber(),password));
}
public static void startGame(boolean isAWinner) {
int lives = 5;
do {
loadNumber();
lives--;
} while (lives > 0 || !isAWinner); //has lives or is not a winner
}
public static int loadNumber() {
System.out.println("Type the number");
Scanner scan = new Scanner(System.in);
int givenNumber = scan.nextInt();
return givenNumber;
}
//check if greater,lower or equal
public static boolean checkNumber(int number, int password) {
boolean isAWinner = false;
if (number == password) {
System.out.println("congratulations");
isAWinner = true;
}
if (number > password) {
System.out.println("too much");
}
if (number < password) {
System.out.println("too little");
}
return isAWinner;
}
答案 0 :(得分:1)
您需要做
JNIEnv*
否则,如果do {
isAWinner = checkNumber(loadNumber(), password);
lives--;
} while (lives > 0 && !isAWinner);
在第一次猜测时不正确,则总会得出true。我还将“或”更改为“与”,以便循环将!isAWinner
或lives == 0
中断一次。
我也将isAWinner == True
变量设置在main方法之外(作为类的字段),以便您可以在password
方法内部访问它。
答案 1 :(得分:1)
您需要检查游戏运行时从用户输入加载的号码,并将结果分配给 isAWinner 。
现在,while循环继续进行,因为在初始错误值之后,从未为 isAWinner 分配新值。
public static void startGame(boolean isAWinner) {
int lives = 5;
do {
//TODO: run checkNumber on result of loadNumber and assign its result to isAWinner
loadNumber();
lives--;
} while (lives > 0 || !isAWinner); //TODO: has lives AND is not a winner
}
此外,您将希望在生命大于零且结果不是赢家的情况下继续循环。
答案 2 :(得分:1)
您的代码强制在第一次尝试时使用户正确。逐步进行操作(您可以使用调试器和断点来完成此操作,或者只是在头脑中遇到这种大小的问题)。
startGame(checkNumber(loadNumber(), password));
loadNumber()
checkNumber(4321, 1234)
,它将打印“太多”然后返回false startGame(false)
这样被调用,因为checkNumber()
函数向其返回了false。 loadNumber()
由于在第一次迭代后不可能获胜,因此条件的第二部分在第一次初始不正确的猜测之后就不会改变。您可以通过将代码更改为while (lives > 0 && !isAWinner);
来解决原来的问题,但是仍然会遇到在第一个答案之后没有检查任何答案的问题。