Java中用Do While循环和For循环计数的区别

9

在计数方面,应该使用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("非常感谢!!");


在某种程度上,这是个人口味的问题。在这种情况下,我更喜欢使用for循环,因为声明的作用域仅限于循环,并且递增在循环体外执行。然而,各种类型的循环主要区别在于“do/while”循环至少会执行一次,而“for”(或“while”)可能不会执行。 - Andy Turner
没关系。顺便说一下,使用Java 8+,您还可以执行IntStream.rangeClosed(1, 6).forEach(times -> System.out.println("我已经打印了" + times + "次。")); - David Conrad
1
“并且两者打印出完全相同的内容” - 不,它们并不一样。 - JackWhiteIII
@JackWhiteIII 是的,我没有意识到使用 for 循环时,它会从“我已经打印了0次”开始。 - Domani Tomlindo
6个回答

9
你说得没错,这两种循环做的事情相同(除了一个从0开始计数,另一个从1开始计数,但那只是实现细节)。如果你的程序在循环开始之前就知道要迭代多少次,大多数Java开发人员会建议使用for循环。这就是它的设计初衷。 while循环或do while循环更适合寻找特定值或条件以便退出循环的情况(例如:count >= 10userInput.equals("N")。任何评估为布尔True/False值的东西)。

是的,我忘记了一个事实(从个人经验来看),在“do-while”循环之后不会执行任何内容,只能继续嵌套循环。 - Domani Tomlindo
2
@DomaniTomlindo 抱歉,什么?一旦“while”条件变为false,其后的语句将被执行;“for”循环也是如此。 - IMil
@IMil 很抱歉(我知道有点晚了),但是我想到的是 do { } while (true);,这是一个无限循环。我的意思是在无限循环之后没有任何代码会执行。 - Domani Tomlindo

4
面对这些困境时,应注重可读性和熟悉度。不要考虑微小的优化问题,专注于可读性和清晰地传达您的意图。在类似情况下,可以像其他人一样做。
就像@Bill-The-Lizard所说,“while”循环会让您的代码读者认为您选择它,是因为您不是在计数,而是在重复直到满足条件。至少一次——否则你会选择“while(...){}”循环。
换句话说,“for”、“do {} while()”和“while() {}”通常都能发挥相同的作用。但在您特定的逻辑中,其中一个可能更好地传达您的意图。

1

Java的最新版本还允许以下操作

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

除了个人喜好之外,这种方法的优点在于索引由运行时维护,程序员不需要写++i


0

使用for循环或do while循环取决于程序员的选择,但大多数程序员遵循的一般惯例是:

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


for(int i = 0; i < n; i++) {
    //Do something
}
  • While循环
    当您知道循环应在特定条件的评估为真之后终止,否则您希望循环永远运行(例如while(true)),并在while循环内部检查中断条件时,使用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;
    }
}
  • Do while循环
    Do while循环与while循环类似,但有一个小差异。它允许第一次迭代在不检查条件(在while语句中指定,但仍然可以在代码块(花括号)中评估条件)的情况下发生。

0

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

while (condition)

也可以写成

for (; condition; )

但显然第一个看起来更好,更易读。


OP 询问的是 do/while 循环,而不是 while 循环。 - Andy Turner

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接