【问题标题】:Exit a while loop Java [closed]退出while循环Java [关闭]
【发布时间】:2013-05-23 15:59:46
【问题描述】:

即使我将计数变量 = 设置为 false,我也无法停止此循环。它不会转到 Main 类中调用的下一个方法。任何帮助将不胜感激。

主类

public class Main {


    public static void main(String[] args) {

        Var V = new Var();
        End E = new End();

        V.enter();
        E.end();

    }

}

变量类

public class Var {

    static int x = 0;
    static boolean count = true;


    public static void enter(){

        while (count = true ){
            x = x+10;
            System.out.println(x);
            count = false;
        }
    }

}

【问题讨论】:

  • 您分配count = true 而不是比较count == true 意味着您实际上只有while (true),从而导致无限循环。
  • 有助于避免此类错误的常用技巧是将常量放在运算符的左侧,例如:while (true == count)。如果您错误地使用赋值运算符 = 而不是比较运算符 ==,编译器会立即告诉您,检测到尝试将值分配给常量。
  • @mustaccio 不,不是。在 Java 中执行此操作的正确方法是 while(count) - 绝对没有理由将其与任何东西进行比较。
  • @Brian Roach:“正确的方法”?根据谁?
  • 有常识的人吗?为什么要添加多余且无用的比较?为什么还要引入意外键入= 而不是== 并触发编译器错误的可能性?请解释为什么这是一个好主意和正确的方法,而不是简单地评估完全消除问题的布尔值。

标签: java loops if-statement while-loop


【解决方案1】:

替换

while (count = true ){

while (count == true ){

或者干脆

while(count){
   ...
}

【讨论】:

  • 原因是count = truetrue 的值分配给变量count,然后将true 的值返回给while 循环,因此即使原来是假的,现在变成了真的。这和@Quetzalcoatl 评论基本一致。
  • 更好的答案是while (count) { ... };没有理由将它与 Java 中的任何东西进行比较。
  • 我想让作者看到他正在做作业。我编辑了答案以添加此解决方案。谢谢
【解决方案2】:

改变

while (count = true) {

while (count) {

表达式count = true 是一个赋值,而不是一个比较,它将使用关系运算符。赋值表达式的结果是赋值,在这种情况下总是true

将布尔表达式与布尔文字(即count == true((x && y) || z) == false)进行比较既丑陋又令人困惑。只需使用表达式本身(count!((x && y) || z))。

【讨论】:

    【解决方案3】:

    即使这也应该起作用,因为 count 已经是布尔值。 单等于while (count =true ){ 导致计数更改为真? `

     public class Var {
    
        static int x = 0;
        static boolean count = true;
    
    
        public static void enter(){
    
            while (count  ){
                x = x+10;
                System.out.println(x);
                count = false;
            }
        }
    
    }
    

    【讨论】:

      【解决方案4】:

      while (count = true) 行使用赋值运算符,而不是相等运算符。赋值运算符在赋值后返回变量的值 - 在本例中为 true (reference)。

      在运行时,赋值表达式的结果是赋值发生后变量的值。赋值表达式的结果本身不是变量。

      所以你的循环实际上是这样的:

      while (true){
          count = true;
          x = x+10;
          System.out.println(x);
          count = false;
      }
      

      要解决此问题,您可以使用相等运算符 == 或仅使用 while (count)。后者的风格更好,但两者都有效。

      【讨论】:

        【解决方案5】:

        改变

        while (count = true) {
        

        while (count == true) {
        

        【讨论】:

          【解决方案6】:
          while (count = true ){
                      x = x+10;
                      System.out.println(x);
                      count = false;
                  }
          

          在这里你使用count = true。这是一个始终返回 true 的分配操作。

          所以你count == true比较一下。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-27
            • 2015-01-18
            • 1970-01-01
            • 2013-06-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多