【问题标题】:when to use while loop rather than for loop何时使用 while 循环而不是 for 循环
【发布时间】:2011-10-06 08:07:53
【问题描述】:

我正在学习 java 以及 android。几乎我们可以通过 while 循环执行的所有事情,那些我们可以在 for 循环中执行的事情。

我发现了一个简单的条件,使用 while 循环比 for 循环更好

如果我必须在我的程序中使用计数器的值,那么我认为 while 循环比 for 循环更好

使用 while 循环

int counter = 0;
while (counter < 10) {
    //do some task
    if(some condition){
        break;
    }
}
useTheCounter(counter); // method which use that value of counter do some other task

在这种情况下,我发现 while 循环比 for 循环更好,因为如果我想在 for 循环中实现相同的效果,我必须将 counter 的值分配给另一个变量。

但是有没有什么具体情况是while循环比for循环好

【问题讨论】:

  • 我会做useTheCounter(10)

标签: java while-loop


【解决方案1】:

一个主要区别是while 循环最适合您提前不知道需要执行的迭代次数的情况。当您在进入循环之前知道这一点时,您可以使用for 循环。

【讨论】:

  • 你能举个例子吗?
  • 通常在从缓冲区中逐行读取文件时,您会使用 while 循环(因为您不知道何时会出现文件结束标记)
【解决方案2】:

for 循环只是一种特殊的 while 循环,它恰好处理递增变量。您可以用任何语言模拟带有while 循环的for 循环。它只是语法糖(除了python,for 实际上是foreach)。所以不,没有一个特定的情况比另一个更好(尽管出于可读性的原因,当您进行简单的增量循环时,您应该更喜欢 for 循环,因为大多数人可以很容易地知道发生了什么)。

For 的行为类似于 while:

while(true)
{
}

for(;;)
{
}

而 while 的行为类似于:

int x = 0;
while(x < 10)
{
    x++;
}

for(x = 0; x < 10; x++)
{
}

在您的情况下,是的,您可以像这样将其重写为 for 循环:

int counter; // need to declare it here so useTheCounter can see it

for(counter = 0; counter < 10 && !some_condition; )
{
    //do some task
}

useTheCounter(counter);

【讨论】:

  • 实际上 counter var 在 for 之外是不可访问的(除非你在它之外声明它)
  • whilefor 在使用增量时并不完全相同 - 如果您还需要使用 continue。使用while,变量不会增加(无需额外努力),但使用for,它会增加。
【解决方案3】:

forwhile 是等价的,只是同一事物的语法不同。


你可以改变这个

while( condition ) {
   statement;
}

到这里:

for( ; condition ; ) {
    statement;
}

另一种方式:

for( init; condition; update) {
    statement;
}

等价于:

init;
while(condition) {
    statement;
    update;
}

所以,就用哪个更好看,或者说更容易说吧。

【讨论】:

    【解决方案4】:

    记住,

    用 for 循环完成的所有事情都可以用 while 循环完成,但不是 所有的while循环都可以用for循环来实现。

    同时:

    While-loops 在退出条件与循环数或控制变量无关时使用

    为:

    for-loops 只是编写 while 循环、初始化语句、控制语句(何时停止)和迭代语句(每次迭代后如何处理控制因素)的捷径)。

    例如,

    基本上for循环只是while循环的简写,任何for循环都可以从:

    for([initialize]; [control statement]; [iteration]) {
       // ...
      }
    

    [initialize]; 
    while([control statement]) { 
       //Do something [iteration];
       } 
    

    都是一样的。

    【讨论】:

    • 省略初始化和迭代,for 循环的行为与while 循环完全相同
    【解决方案5】:

    如果您知道要循环的次数,请使用 FOR 循环。技术术语是迭代次数。你怎么知道迭代次数?你知道开始,停止和步骤。如果您知道这三个信息,则应该使用 FOR 循环,因为它是完成这项工作的正确工具。
    当您不知道迭代次数时,请使用 DO 循环。如果您不知道开始、停止、步进或它们的某种组合,那么您需要使用 DO 循环。表达式将在循环顶部进行评估。 如果您想至少循环一次,请使用 DO WHILE 循环。如果您不想至少循环一次,请仅使用 WHILE 循环。表达式将在循环的底部进行计算。

    【讨论】:

      【解决方案6】:

      for 是有限的,从某种意义上说,当它用完要循环的元素时,它将完成循环......

      如果不满足条件或循环中断,while 可以是无限的

      编辑

      我的错误...for 可以是无限的..

      【讨论】:

      • for 可以是无限的:for(;;)
      • for 也可以是无限的:for (i = 1; i == i - 1; i++) { ... }
      • 如果你想接触集合中的所有元素,使用for,如果你想早点中断,使用while是非常明智的。
      • @K4emic:您可以像跳出while 循环一样跳出for 循环。没有区别。
      • @Chris 当然,我是否写了一些你不能写的东西?我只是陈述了我认为的一种合理的方式来区分循环遍历集合的方式。
      【解决方案7】:

      当您没有迭代器(通常是计数器)时,while 循环通常会更好。

      【讨论】:

        【解决方案8】:

        我觉得我应该指出的一点是,当您使用 for 循环时,您不需要将 counter 分配给另一个变量。例如for(counter=0; counter&lt;10; counter++) 是有效的 Java 代码。

        对于您的问题,当您希望一段代码运行一定次数时,for循环通常更好,而当代码继续运行的条件更一般时,while循环更好,例如具有仅在代码块中满足特定条件时才设置为 true 的布尔标志。

        【讨论】:

          【解决方案9】:

          你可以这样做:

          int counter;
          for (counter = 0; counter < 10; ) {
              //do some task
              if(some condition){
                  break;
              }
          }
          useTheCounter(counter);
          

          while 循环可以做的任何事情,也可以在 for 循环中完成,for 循环可以做的任何事情也可以在 while 循环中完成。

          【讨论】:

            【解决方案10】:

            没有。没有特定情况 for 优于 while
            他们做同样的事情。
            应用其中之一由您决定。

            【讨论】:

              【解决方案11】:
              int counter = 0;
              while (counter < 10) {
                  //do some task
                  if(some condition){
                      break;
                  }
              }
              useTheCounter(counter); // method which use that value of counter do some other task
              

              您好,我重复您的代码,因为它不正确。你忘记增加你的计数器,所以它会保持在 0

              int counter = 0;
              while (counter < 10) {
                //do some task
                if(some condition){
                    break;
                }
                counter++;
              }
              useTheCounter(counter); // method which use that value of counter do some other task
              

              【讨论】:

                【解决方案12】:

                while 循环更灵活,而for 循环更具可读性,如果这就是您的要求。如果您想知道哪个更快,请查看我进行的关于forwhile 循环速度的实验。

                https://sites.google.com/a/googlesciencefair.com/science-fair-2012-project-96b21c243a17ca64bdad77508f297eca9531a766-1333147438-57/home

                while 循环更快。

                【讨论】:

                  【解决方案13】:

                  你可以在 for 循环中编写的任何内容都可以转换为 while 循环。使用 for 循环的好处是

                  1. 该语法允许您启动计数器,将条件设置为退出循环,然后自动递增。

                  您也可以在 while 循环中完成相同的操作。但是你在while循环中可以做的所有事情都不能在for循环中做。例如,如果您有多个计数器,并且您希望它们中的任何一个根据条件递增,则只能使用 while。在循环结束时的 for 循环中,计数器增量会自动发生。

                  最佳使用

                  对于矩阵或者单数组单向遍历,for循环就好了 如果有多个条件和多个计数器,则 while 循环很好。如果你想根据不同的条件从两边遍历一个数组,那么while循环很好。

                  在循环中,有更多的机会忘记增量计数器并最终进入无限循环,而 for 循环语法将帮助您轻松设置计数器。

                  【讨论】:

                    【解决方案14】:

                    For 循环包含计数的概念,这很棒。然而,当您不知道代码应该运行多少次时,while 循环是有意义的。

                    【讨论】:

                      猜你喜欢
                      • 2020-08-14
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-12-10
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-04-21
                      • 2018-07-30
                      • 1970-01-01
                      相关资源
                      最近更新 更多