【问题标题】:Do While Loops Versus For Loops in Java for Counting在 Java 中使用 While 循环与 For 循环进行计数
【发布时间】:2018-10-09 20:36:21
【问题描述】:

在计数方面,应该使用do-while 循环还是for 循环?因为这个:

class Main {
  public static void main(String[] args) {
    int times = 1;
    do {
      System.out.println("I have printed " + times + " times.");
      times++;
    } while (times < 6);
  }
}

似乎与此完全相同:

class Main {
  public static void main(String[] args) {
    for (int times = 1; times < 6; times++) {
      System.out.println("I have printed " + times + " times.");
    }
  }
}

这是速度上的差异吗?偏爱?情况?个人怪癖?某种“Java 社交禁忌”?我不知道。两者似乎都可以用于有效计数,只是需要更多。并且两者都打印确切相同的东西。

System.out.println("Many thanks!!");

【问题讨论】:

  • 在某种程度上,它归结为品味。在这种情况下,我更喜欢使用 for 循环,因为声明的范围是循环,而递增是在循环体之外。然而,循环类型之间的主要区别在于do/while 循环至少执行一次,而for(或while)可能不会执行。
  • 没关系。顺便说一句,使用 Java 8+,你也可以这样做 IntStream.rangeClosed(1, 6).forEach(times -&gt; System.out.println("I have printed " + times + " times."));
  • “两者都打印完全相同的东西” - 不,他们没有。
  • @JackWhiteIII 是的,我没有意识到for 循环的开头是“我已经打印了 0 次”。

标签: java for-loop do-while counting


【解决方案1】:

你是对的,它们做同样的事情(除了一个从 0 开始计数,另一个从 1 开始计数,但这只是一个实现细节)。如果您的程序预先知道(在循环开始之前)您希望循环迭代多少次,大多数 Java 开发人员会告诉您使用 for 循环。这就是它的设计目的。

while 循环或do while 循环更适合您在退出循环之前查找特定值或条件的情况。 (类似于 count &gt;= 10userInput.equals("N")。任何计算结果为布尔 True/False 值的东西。)

【讨论】:

  • 没错,我忘记了这样一个事实,(根据个人经验),do-while 循环之后没有任何执行,只需要保持嵌套循环。
  • @DomaniTomlindo 对不起,什么?一旦“while”条件变为假,则执行其后的语句; “for”循环也是如此
  • @IMil 我很抱歉,(是的,我知道这已经晚了),但我在想do { } while (true);,这是一个无限循环。我的意思是在无限循环之后什么都不执行。
【解决方案2】:

当面临这些困境时,应以可读性和熟悉度为目标。您不应该关心微优化。专注于可读性并清楚地传达您的意图。在类似情况下像其他人一样做。

就像@Bill-The-Lizard 所说,while 循环向您的代码的读者建议您选择了它,因为您没有计算,而是重复直到满足条件。至少一次 - 否则你会选择 while(...){ } 循环。

换句话说,fordo {} while()while() { } 通常工作方式相同。但是,在您的特定逻辑中可能会更好地传达您的意图。

【讨论】:

    【解决方案3】:

    我认为它更多的是可读性和语法糖。这个while条件

    while (condition)
    

    也可以写成

    for (; condition; )
    

    但显然第一个看起来好多了,并且更具可读性。

    【讨论】:

    • OP 询问的是 do/while 循环,而不是 while 循环。
    【解决方案4】:

    这取决于程序员选择何时使用 for 循环或执行 while 循环,但大多数程序员遵循的一般做法是

    • For 循环
      当您知道循环将执行预定义的次数时(一般做法,因为您也可以使用 for(;true;) 永远循环)。 例如一个循环运行 10 次或 n 次,其中 n 是一个变量


    for(int i = 0; i < n; i++) {
        //Do something
    }
    
    • 同时循环
      当您知道循环应该在特定条件评估为 true 后终止,或者您希望循环永远运行(如 while(true))并检查 while 循环内的中断条件。
      此外,当您首先无​​法弄清楚条件并从 while(true) 开始时,最好使用 while 循环,但是一旦在循环内编写代码,您就会很好地理解正在发生的事情并了解要检查的条件因此何时退出循环。 例如


    while(x != 0) {
        //Do something;
        x--;
    }
    


    while(true) {
        // some code to execute on which the condition depends
        if(condition is true) {
            break;
        }
    }
    
    • 执行while循环
      Do while 循环类似于 while 循环,但有一点不同。也就是说,它允许在不检查条件的情况下进行第一次迭代(在 while 语句中指定,但您仍然可以评估块内的条件(大括号))。

    【讨论】:

      【解决方案5】:

      按照惯例,大多数 Java 开发人员使用 for 循环。有效的 Java 建议使用 for 循环而不是 while 循环,因为循环变量可以使用更紧凑的范围,从而减少错误。 http://www.corejavaguru.com/effective-java/items/45

      【讨论】:

        【解决方案6】:

        Java 的最新版本还允许以下内容

            IntStream.range(0, 6).forEach(
                    i -> System.out.println("I have printed " + i + " times.")
            );
        

        除了个人喜好,这个的好处是索引由运行时维护,程序员不用++i

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-11
          • 2021-03-27
          • 2010-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多