Java While循环不以布尔值更改终止
一个有效的例子是有一个while循环,该循环继续从用户那里获取一个数字,直到用户正确猜出该数字,然后它将返回true并退出while循环 但是,如果我创建一个返回变量是true还是false的方法,while循环不会终止。但是,如果if条件在while循环内,它将终止并按预期工作 按预期工作的代码:Java While循环不以布尔值更改终止,java,Java,一个有效的例子是有一个while循环,该循环继续从用户那里获取一个数字,直到用户正确猜出该数字,然后它将返回true并退出while循环 但是,如果我创建一个返回变量是true还是false的方法,while循环不会终止。但是,如果if条件在while循环内,它将终止并按预期工作 按预期工作的代码: private void print() { // Method name not decided yet boolean playerGuessedCorrectly = fal
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;
}
}
为了澄清这一点,当userGuess==computerNumber位于while循环内时,while循环终止,但是,当它被拆分为不同的方法并返回值时,while循环不起作用
请注意,当我打印出该方法给出的值时,它已打印为true。所以我不明白为什么当方法中的值为true时它不终止,但它在while循环中以if条件终止 这一行:
playerGuessedCorrectly = false;
这一行:
return playerGuessedCorrectly = true;
不工作,因为Java按值传递参数。实际上,您正在将false
分配给playerGuessedCorrectly
的副本,该副本是checkifgustismynumber
函数的本地副本,而不是print
函数中的原始版本
逐行遵循非工作代码:
boolean playerGuessedCorrectly = false;
这正是我们想要的
while(!playerGuessedCorrectly) {
// ...
}
如果正确更新了playerguesseddo的值,则这将按预期工作
checkIfGuessIsMyNumber(playerGuessedCorrectly);
这就是你错的地方。这会将当前存在的playerguessedd变量的值正确地
复制到checkifgustismynumber
函数的参数中。在该函数中,playerGuessedCorrectly
的新副本被重新分配了不同的值,您有一个return语句,但请注意,您从未实际使用该函数的返回值。如果您改为这样做:
playerGuessedCorrectly = checkIfGuessIsMyNumber(playerGuessedCorrectly);
您的代码将按预期工作。您可能还需要清理checkifgustismynumber
函数的主体:
if(userGuess == computerNumber) {
System.out.print("You have guessed my number.");
return true;
} else {
return false;
}
这一行:
playerGuessedCorrectly = false;
这一行:
return playerGuessedCorrectly = true;
不工作,因为Java按值传递参数。实际上,您正在将false
分配给playerGuessedCorrectly
的副本,该副本是checkifgustismynumber
函数的本地副本,而不是print
函数中的原始版本
逐行遵循非工作代码:
boolean playerGuessedCorrectly = false;
这正是我们想要的
while(!playerGuessedCorrectly) {
// ...
}
如果正确更新了playerguesseddo的值,则这将按预期工作
checkIfGuessIsMyNumber(playerGuessedCorrectly);
这就是你错的地方。这会将当前存在的playerguessedd变量的值正确地
复制到checkifgustismynumber
函数的参数中。在该函数中,playerGuessedCorrectly
的新副本被重新分配了不同的值,您有一个return语句,但请注意,您从未实际使用该函数的返回值。如果您改为这样做:
playerGuessedCorrectly = checkIfGuessIsMyNumber(playerGuessedCorrectly);
您的代码将按预期工作。您可能还需要清理checkifgustismynumber
函数的主体:
if(userGuess == computerNumber) {
System.out.print("You have guessed my number.");
return true;
} else {
return false;
}
Java中的参数通过值传递。因此,当调用playerGuessedCorrectly=false
时,只需覆盖playerGuessedCorrectly
参数的本地副本
将逻辑包含在函数中的另一种方法是让它返回适当的值:
private void print() {
boolean playerGuessedCorrectly = false;
while(!playerGuessedCorrectly) {
playerGuessedCorrectly = checkIfGuessIsMyNumber();
}
}
private boolean checkIfGuessIsMyNumber() {
// 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 true;
} else {
return false;
}
}
Java中的参数通过值传递。因此,当调用playerGuessedCorrectly=false
时,只需覆盖playerGuessedCorrectly
参数的本地副本
将逻辑包含在函数中的另一种方法是让它返回适当的值:
private void print() {
boolean playerGuessedCorrectly = false;
while(!playerGuessedCorrectly) {
playerGuessedCorrectly = checkIfGuessIsMyNumber();
}
}
private boolean checkIfGuessIsMyNumber() {
// 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 true;
} else {
return false;
}
}