【问题标题】:For loops vs. While loops [duplicate]For循环与While循环[重复]
【发布时间】:2014-03-23 11:36:10
【问题描述】:

看起来,至少在我习惯的所有语言中,while 循环可以完成for 循环可以做的所有事情,甚至更多。由于我最熟悉 Java,因此我将使用它作为示例:

int foo = 6;
while (foo > 0)
{
    this.bar();
    foo--;
}

在功能上似乎与

for (int foo = 6; foo > 0; foo--)
    this.bar();

在我看来,for 循环在功能上与while 循环相比完全是多余的。我在这里想念什么?编译后,一个比另一个更快或更精简吗?一旦不再需要 foo 计时器,它会自动放弃吗?它们在某些编译器中是否完全相同?

如果它们完全相同,我会感到非常惊讶,因为,你知道,DRY。

我之前看到过类似的问题,但没有人寻求真正详细的答案。

【问题讨论】:

  • 我在这里回答了这个问题:stackoverflow.com/questions/21869399/disadvantage-of-for-loop/… 还有一个 while 不能比 for 做 更多 的事情,它们是等价的,因为 for(;<condition>;) 正是一个 while(<condition>)
  • 任何事情,for 循环都可以做,while 循环也可以做,反之亦然。没有“更好”的循环。通常,如果迭代次数在循环开始时是固定的,则使用 for 循环,而在先验未知迭代次数时使用 while 循环。但你不必这样。

标签: java for-loop while-loop


【解决方案1】:

在内部,两个循环都编译为相同的机器代码。重复执行代码的两种方式的存在源于它们各自的两个不同用例:for 循环通常用于遍历相同对象的有限集合,以相同的方式处理它们。另一方面,while 循环更加通用,通常用于重复一段代码,直到满足条件。例如,在这段伪代码中:

while(document.nextLine())
    document.doStuff();

while 循环遍历文档的行,并处理每一行。事先不知道有多少行。这不能在 for 循环中轻松完成,您需要提前知道何时停止。

【讨论】:

  • 另外,我们不为计算机编写代码。我们为自己和其他程序员写作。
  • 这有什么问题? for( ; document.nextLine() ; ) document.doStuff() ;
【解决方案2】:

一个for循环一个while循环。唯一的区别是 for 循环包含初始化和状态更改选项,而 while 循环需要您单独执行这些操作。

区别实际上更多是为了易用性和可读性,而不是纯粹的功能性。假设你想遍历一个列表:

for(int i = 0; i < list.size(); i++){
    //code
}

看起来比:

int i = 0;
while(i<list.size()){
    //code
    i++;
}

尽管它们(几乎)在功能上是相同的。为什么我说差不多?那么变量i 的范围在这两种情况下是不同的。例如,如果您想在完成第一个列表之后对列表进行 another 迭代,则可以在使用 for 循环时重新使用 i 变量。但是,如果您使用 while 循环,i 仍将在范围内(您可能不希望这样做,因为它的目的只是协助该迭代)。

【讨论】:

    【解决方案3】:

    两者在功能上是等价的。但是,有一些 dowhile 循环至少会执行一次(这是 for 循环无法做到的),并且有增强的 for 循环: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2011-05-11
      • 2015-09-18
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      相关资源
      最近更新 更多