命名布尔值在while语句中不起作用

时间:2018-01-28 11:49:18

标签: java while-loop 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;

    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);

提前感谢您的帮助。

2 个答案:

答案 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);