【问题标题】:Java - do loop help explaining neededJava - 做循环帮助解释需要
【发布时间】:2011-12-29 17:15:47
【问题描述】:

为什么下面的代码会执行六次?请帮助我了解它是如何工作的,因为我试图将它融入我的脑海,但没有成功。

我以为它会先执行代码一次,然后将count增加到1,再执行一次第二次,将count增加到2,执行第三次,将计数增加到3,执行第四次,将计数增加到4,执行它第五次,将计数增加到 5,然后停止。这意味着它将执行 五次 次循环(第一次,然后在 count 为 1、2、3、4 时执行)。

int count = 0;

    do {

        System.out.println("Welcome to Java!");

    } while (count++ < 5);

【问题讨论】:

    标签: java loops do-loops


    【解决方案1】:

    你试过运行this code吗?

    int count = 0;
    
    do {
    
        System.out.println("Welcome to Java! " + count);
    
    } while (count++ < 5);
    

    输出:

    Welcome to Java! 0
    Welcome to Java! 1
    Welcome to Java! 2
    Welcome to Java! 3
    Welcome to Java! 4
    Welcome to Java! 5
    

    这应该可以帮助您了解正在发生的事情。其他人是否说过您的困惑很可能在于后增量运算符的工作方式。

    为了帮助您了解前后递增运算符,请运行another code sample

    int a = 0;
    int b = 0;
    System.out.println("pre increment "+ ++a);
    System.out.println("post increment "+ b++);
    

    输出:

    pre increment 1
    post increment 0
    

    总结:使用后自增,表达式在变量自增之前进行计算,使用前自增,表达式在之后变量被计算递增。

    【讨论】:

      【解决方案2】:

      它的后缀运算符,所以首先评估整个表达式然后递增

      控制会这样流动

      0
      Welcome to Java!
      //condition check : 0 then 1
      Welcome to Java!
      //condition check : 1 then 2
      Welcome to Java!
      //condition check : 2 then 3
      Welcome to Java!
      //condition check : 3 then 4
      Welcome to Java!
      //condition check : 4 then 5
      Welcome to Java!
      //condition check : 5 then 6
      

      【讨论】:

        【解决方案3】:

        那是因为您使用的是后增量。首先评估 while 条件(使用 BEFORE 增量中的 count 值),然后增加 count

        试试++count(它先递增然后返回值)。

        编辑:

        注意,虽然在

        for(int i = 0; i < n; i++) {}
        

        没问题(通常会得到优化等),

        for(int i = 0; i < n; ++i) {}
        

        从IMO的语义角度来看要好一些。

        在具有运算符重载的语言中它变得更加复杂,其中 i++ 可能具有与 ++i 不同的副作用。

        【讨论】:

          【解决方案4】:
          count++; // <-- would execute the above code 6 times
          

          是后增量和

          ++count; // <-- would execute the above code 5 times 
          

          是预增量

          考虑:

          while (count++ < 5) System.out.println(count); // prints 1 2 3 4 5
          while (++count < 5) System.out.println(count); // prints 1 2 3 4
          

          因此,您的 do...while 首先在没有比较的情况下执行(因为这样做),然后运行比较。

          如果是预增量,可以这样重写:

          int count = 0;
          do {
              // print
              count = count + 1;
          } while (count < 5)
          

          如果是后增量,可以这样重写:

          int count = 0;
          while (count < 5) {
               // print statement
               count = count + 1;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多