gpt4 book ai didi

java - While 循环不会随着 boolean 值的变化而终止

转载 作者:行者123 更新时间:2023-11-29 06:57:56 24 4
gpt4 key购买 nike

一个有效的例子是有一个 while 循环,它继续从用户那里获取一个数字,直到他们猜对了数字,然后它会返回 true 并退出 while 循环。

但是,如果我创建一个返回变量是真还是假的方法,则 while 循环不会终止。但是,如果 IF 条件在 while 循环内,它将终止并按预期工作。

按预期工作的代码:

 private void print() { // Method name not decided yet
boolean playerGuessedCorrectly = false;
while(!playerGuessedCorrectly) {
[...] // Other code that asks the user to enter a new number
// userGuess is the next int entered by the user
// computerNumber is a random number between 1 and 100
if(userGuess == computerNumber) {
System.out.print("You have guessed my number.");
playerGuessedCorrectly = true;
} // while loop terminates upon true
}
}

此代码有效,当它更改为 true 时 while 循环停止工作。但是,当我将相同的代码放入一个方法中时,while 循环会继续运行并且不会终止:

无效代码:

private void print() {
boolean playerGuessedCorrectly = false;
while(!playerGuessedCorrectly) {
checkIfGuessIsMyNumber(playerGuessedCorrectly);
} // value of playerGuessedCorrectly is sent to method checkIfGuessIsMyNumber();

private boolean checkIfGuessIsMyNumber(boolean playerGuessedCorrectly) {
// userGuess is the next int entered by the user
// computerNumber is a random number between 1 and 100
if(userGuess == computerNumber) {
System.out.print("You have guessed my number.");
return playerGuessedCorrectly = true;
} else {
playerGuessedCorrectly = false;
}
}

需要说明的是,当 IF userGuess == computerNumber 在 while 循环内时 while 循环终止,但是,当它被拆分为不同的方法并返回值时它不起作用。

注意,当我打印出方法给出的值时,已经打印出true了。所以我很困惑为什么当方法中的值为真时它不终止,而是在 while 循环内以 if 条件终止。

最佳答案

这一行:

playerGuessedCorrectly = false;

还有这一行:

return playerGuessedCorrectly = true;

不起作用,因为 Java 按值传递参数。您实际上是将 false 分配给 playerGuessedCorrectly 的副本,该副本是 checkIfGuessIsMyNumber 函数的本地副本,不是 print 函数中的原始版本。

逐行查看无效代码:

boolean playerGuessedCorrectly = false;

这按预期工作。

while(!playerGuessedCorrectly) {
// ...
}

如果正确更新了 playerGuessedCorrectly 的值,这将按预期工作。

checkIfGuessIsMyNumber(playerGuessedCorrectly);

这就是你出错的地方。这会将当前存在的 playerGuessedCorrectly 变量的值复制到 checkIfGuessIsMyNumber 函数的参数中。在该函数中,playerGuessedCorrectly 的新副本被重新分配了不同的值,并且您有一个返回语句,但请注意,您实际上从未使用该函数的返回值。如果你改为这样做:

playerGuessedCorrectly = checkIfGuessIsMyNumber(playerGuessedCorrectly);

您的代码将按预期工作。您可能还想清理 checkIfGuessIsMyNumber 函数的主体:

if(userGuess == computerNumber) {
System.out.print("You have guessed my number.");
return true;
} else {
return false;
}

关于java - While 循环不会随着 boolean 值的变化而终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31088976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com