Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java While循环不以布尔值更改终止_Java - Fatal编程技术网

Java While循环不以布尔值更改终止

Java While循环不以布尔值更改终止,java,Java,一个有效的例子是有一个while循环,该循环继续从用户那里获取一个数字,直到用户正确猜出该数字,然后它将返回true并退出while循环 但是,如果我创建一个返回变量是true还是false的方法,while循环不会终止。但是,如果if条件在while循环内,它将终止并按预期工作 按预期工作的代码: private void print() { // Method name not decided yet boolean playerGuessedCorrectly = fal

一个有效的例子是有一个while循环,该循环继续从用户那里获取一个数字,直到用户正确猜出该数字,然后它将返回true并退出while循环

但是,如果我创建一个返回变量是true还是false的方法,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;
    }
}
为了澄清这一点,当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;
   }
}