繁体   English   中英

做循环与Java中的循环计数

[英]Do While Loops Versus For Loops in Java for Counting

在计算时,是应该使用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!!");

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

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

面对这些困境时,目标是可读性和熟悉性。 您不应该关注微观优化。 注重可读性并明确传达您的意图。 像其他人一样在类似的情况下做。

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

换句话说, fordo {} while()while() { }通常工作相同。 但是你可以更好地传达你对你特定逻辑的意图。

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

  • 对于循环
    当你知道循环将执行预定义的次数时(通常的做法,因为你也可以使用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循环类似于while循环,但差别很小。 也就是说它允许第一次迭代发生而不检查条件(在while语句中指定,但你仍然可以评估块内的条件(花括号))。

我认为这更像是一种可读性和语法糖。 这一条件

while (condition)

也可以写成

for (; condition; )

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

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

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

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

除了个人偏好之外,这个还有一个优点,即索引由运行时维护,程序员不需要++i

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM