在尝试通过命名布尔值来使我的代码更容易阅读时,我遇到了一个问题。它没有按预期正常执行,我无法找到原因。以下代码正确执行。
import java.util.Scanner;
public class While {
public static void main (String [] args){
int count,number;
System.out.println("Please enter the number you want to count upto:");
Scanner userInput = new Scanner(System.in);
number= userInput.nextInt();
count = 1;
while(count<=number)
{
System.out.println(count +" ,");
count++;
}
}
}
但是如果我更改代码并为while循环的boolean语句指定名称,它就不会停止并提供完全意外的结果。
import java.util.Scanner;
public class While {
public static void main (String [] args){
int count,number;
System.out.println("Please enter the number you want to count upto:");
Scanner userInput = new Scanner(System.in);
number= userInput.nextInt();
count = 1;
boolean onlyWhen = (count<=number);
while(onlyWhen)
{
System.out.println(count +" ,");
count++;
}
}
}
很抱歉提出一个愚蠢的问题,但我只是好奇并寻找这个意外结果的原因。
有问题的代码是
boolean onlyWhen = (count<=number);
提前感谢您的帮助。
答案 0 :(得分:4)
分配时:
boolean onlyWhen = (count<=number);
在循环开始之前,您正在进行一次此分配。 onlyWhen
的值是固定的,除非您在循环中重新分配,否则不会更改:
while (onlyWhen) {
System.out.println(count +" ,");
count++;
onlyWhen = (count<=number);
}
请注意,这不是很好的代码,我可能更喜欢你原来的代码:
while (count <= number) {
System.out.println(count +" ,");
count++;
}
答案 1 :(得分:3)
str = str.replace(regex, '');
只被评估一次,所以它总是为真(导致无限循环)或总是为假(导致while循环永远不被执行)。
您必须在循环中对其进行修改才能使其有用:
boolean onlyWhen = (count<=number);