java codebreaker - 循环不会结束
java codebreaker - loop won't end
我正在尝试 "codebreaker"。用户尝试猜测随机密码(4 位整数)
程序说如果输入的密码太 low/high/equal。但是我卡住了,我不明白为什么我的循环不会结束。
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;
}
你需要做的
do {
isAWinner = checkNumber(loadNumber(), password);
lives--;
} while (lives > 0 && !isAWinner);
否则,如果第一次猜测不正确,!isAWinner
将始终评估为真。我还将 OR 更改为 AND 以便循环中断一次 lives == 0
或 isAWinner == True
.
此外,我会在 main 方法之外设置您的 password
变量(作为 class 的一个字段),这样您就可以在 startGame
方法中访问它。
您需要在游戏 运行 时检查从用户输入加载的号码,并将结果分配给 isAWinner。
现在 while 循环还在继续,因为 isAWinner 从未在初始 false 值之后分配新值。
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
}
此外,您会希望循环在生命大于零且结果不是赢家时继续。
您的代码强制用户在第一次尝试时就正确。逐步完成它(您可以使用调试器和断点来完成此操作,或者只是在头脑中解决这个规模的问题)。
- 你打电话给
startGame(checkNumber(loadNumber(), password));
- 首先调用最里面的函数,在本例中是
loadNumber()
- 假设用户输入了一个不正确的号码(例如4321)
- 接下来调用下一个最里面的函数
checkNumber(4321, 1234)
它将打印 "too much" 然后 return false
- 现在,您的外部函数被这样调用
startGame(false)
,因为 checkNumber()
函数 return 为它设置了 false。
- 它给你5条命,然后调用
loadNumber()
- 加载了一个新号码,但是从未进行过检查号码的函数调用!!
- 这种情况会发生,直到生命值达到 0,也就是当您期望它终止时,但是您的 while 条件是这样说的:如果用户有生命,则继续玩游戏OR 如果用户没有获胜。
由于第一次迭代后不可能获胜,条件的第二部分在第一次初始错误猜测后永远不会改变。您可以通过将代码更改为 while (lives > 0 && !isAWinner);
来解决您提出的原始问题,但您仍然会遇到在第一个答案之后没有检查任何答案的问题。
我正在尝试 "codebreaker"。用户尝试猜测随机密码(4 位整数) 程序说如果输入的密码太 low/high/equal。但是我卡住了,我不明白为什么我的循环不会结束。
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;
}
你需要做的
do {
isAWinner = checkNumber(loadNumber(), password);
lives--;
} while (lives > 0 && !isAWinner);
否则,如果第一次猜测不正确,!isAWinner
将始终评估为真。我还将 OR 更改为 AND 以便循环中断一次 lives == 0
或 isAWinner == True
.
此外,我会在 main 方法之外设置您的 password
变量(作为 class 的一个字段),这样您就可以在 startGame
方法中访问它。
您需要在游戏 运行 时检查从用户输入加载的号码,并将结果分配给 isAWinner。
现在 while 循环还在继续,因为 isAWinner 从未在初始 false 值之后分配新值。
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
}
此外,您会希望循环在生命大于零且结果不是赢家时继续。
您的代码强制用户在第一次尝试时就正确。逐步完成它(您可以使用调试器和断点来完成此操作,或者只是在头脑中解决这个规模的问题)。
- 你打电话给
startGame(checkNumber(loadNumber(), password));
- 首先调用最里面的函数,在本例中是
loadNumber()
- 假设用户输入了一个不正确的号码(例如4321)
- 接下来调用下一个最里面的函数
checkNumber(4321, 1234)
它将打印 "too much" 然后 return false - 现在,您的外部函数被这样调用
startGame(false)
,因为checkNumber()
函数 return 为它设置了 false。 - 它给你5条命,然后调用
loadNumber()
- 加载了一个新号码,但是从未进行过检查号码的函数调用!!
- 这种情况会发生,直到生命值达到 0,也就是当您期望它终止时,但是您的 while 条件是这样说的:如果用户有生命,则继续玩游戏OR 如果用户没有获胜。
由于第一次迭代后不可能获胜,条件的第二部分在第一次初始错误猜测后永远不会改变。您可以通过将代码更改为 while (lives > 0 && !isAWinner);
来解决您提出的原始问题,但您仍然会遇到在第一个答案之后没有检查任何答案的问题。