【问题标题】:Naming Boolean does not work in while statement命名布尔值在 while 语句中不起作用
【发布时间】:2018-07-07 05:57:54
【问题描述】:

在尝试通过命名布尔值来使我的代码更易于阅读时,我遇到了一个问题。它没有按预期正确执行,我无法找到其背后的原因。以下代码正确执行。

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 循环的布尔语句,它不会停止并提供完全意外的结果。

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

提前感谢您的帮助。

【问题讨论】:

  • 提取变量“onlyWhen”来表示while循环“仅在”为真时执行是没有意义的。这就是while循环中条件的含义。如果您不了解 while 循环,那么变量名并不能真正帮助您。

标签: java while-loop boolean


【解决方案1】:
boolean onlyWhen = (count<=number);

只计算一次,所以它要么总是真(导致无限的while循环)要么总是假(导致while循环永远不会被执行)。

您必须在循环中对其进行修改以使其有用:

boolean onlyWhen = (count<=number);

while(onlyWhen)
{
    System.out.println(count +" ,");

    count++;
    onlyWhen = (count<=number);
}

【讨论】:

    【解决方案2】:

    当你分配时:

    boolean onlyWhen = (count<=number);
    

    在循环开始之前,您只进行了一次分配。 onlyWhen 的值是固定的,除非你在循环中重新分配它,否则它不会改变:

    while (onlyWhen) {
        System.out.println(count +" ,");
        count++;
        onlyWhen = (count<=number);
    }
    

    请注意,这不是很好的代码,我可能更喜欢你原来的代码:

    while (count <= number) {
        System.out.println(count +" ,");
        count++;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-02
      • 2013-10-21
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多