【问题标题】:booleans in for loopfor循环中的布尔值
【发布时间】:2014-06-23 09:26:28
【问题描述】:

为什么会这样

 for(int i = 10; i > 0; i--) {
        System.out.println("printing " + i);
    }

但不是这个?它被编译器接受,但运行时不会打印任何内容

for(int j = 10; j == 1; j--) {
    System.out.println("printing " + j);
}

如果这是一个愚蠢的问题,我真的很抱歉:/ 它应该是同一个布尔值,不是吗?

【问题讨论】:

    标签: java loops boolean


    【解决方案1】:

    因为您在 j 等于 1 时运行循环;但它以 10 开头。你想要的是这样的:

    for(int j = 10; j != 1; j--) {
        System.out.println("printing " + j);
    }
    

    在这里,您在 j 等于 1 时运行循环。

    编辑:原来的失败循环可以自动转换为以下while循环:

    {
        int j = 10;
        while(j == 1) {
            System.out.println("printing " + j);
            j--;
        }
    }
    

    这更清楚地解释了为什么它从未运行过。

    【讨论】:

    • 啊,现在我明白了,第二个表达式表示在表达式仍然为真时运行,而不是表示循环将在何处停止的表达式。谢谢:D
    • @Rei 正确。一个非常重要的区别。
    【解决方案2】:

    首先,初始化完成(它只执行一次,在第一次迭代时):

    int j = 10
    

    然后,评估终止表达式:

    j == 1
    

    由于j 是10,所以j == 1 将是10 == 1,即false

    循环终止表示循环必须结束,所以循环的主体从不执行。

    总结:如果终止表达式为true,则循环体将被执行。如果是false,则不执行body,循环结束。

    【讨论】:

    • 我不明白,如果终止表达式为真,那么循环是否会终止正确?如果表达式仍然为假,为什么从不执行循环体?
    • 如果 termination 表达式为true,则将执行循环体。如果是false,则不会执行body,循环结束。
    • @Rei 接受答案以关闭此问题。谢谢
    【解决方案3】:
    for(int j = 10; j == 1; j--) {...}
    

    在第一次迭代时,j==110==1 将为 false,循环将中断。

    for(int j = 10; j != 0; j--) {...} 这会起作用。

    【讨论】:

      【解决方案4】:

      一般语法是:

      for (intialization; condition; iteration/recursion)
      {
          // Loop entered if condition evaluates to true.
      
         // At end of loop, recursion condition updated and loop continues based on condition
      
      }// Loop terminates when condition evaluates to false;
      

      在你的情况下,

      for(int j = 10; j == 1; j--) {
          System.out.println("printing " + j);
      }
      
      // You have initialized j=10, but since j!= 1, the loop is not being entered.
      

      要使其工作,请将条件 j==1 替换为 j>=1

       for(int j = 10; j >= 1; j--) {
          System.out.println("printing " + j);
      }
      

      【讨论】:

        【解决方案5】:

        在你的情况下,termination expression j == 1 在 for 循环中始终是 false

        这就是为什么它不会进入循环并打印任何内容。

        来自 Java 文档 - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

        When the termination expression evaluates to false, the loop terminates.
        

        【讨论】:

          【解决方案6】:

          for 循环条件永远不会为真,因为您从 j = 10 和条件 j == 1 开始,这将永远为假。而是尝试类似的东西。

          for(int j = 10; j != 1; j--){
            system.out.println("Printing: " + j)
          }
          

          for(int j = 10; j > 1; j--){
            system.out.println("Printing: " + j)
          }
          

          【讨论】:

            【解决方案7】:

            你的问题是关于 for 循环的基本问题

            在上面的 for 循环中,您给出一个范围,例如我的循环是反向旋转 10 次意味着 0 到时间次打印您的结果 喜欢,

            打印 10 印刷 9 印刷 8 . . . . 打印 1

            最后一个循环不会打印任何东西,因为它不能满足条件 j == 1

            希望你能理解..

            【讨论】:

            • 没有第二个循环不会打印任何东西。
            • 是的!你是对的,第二个循环不会打印任何东西,因为变量 j 不能满足条件......
            【解决方案8】:

            您在第二个循环中遇到了终止条件的问题。应该是这样的

            for(int j = 10; j > 1; j--) {
                 System.out.println("printing " + j);
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-08-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-03
              • 1970-01-01
              • 2011-08-01
              • 2018-12-13
              相关资源
              最近更新 更多