【问题标题】:Modify while loop to execute at-least once修改while循环以至少执行一次
【发布时间】:2014-01-06 15:45:25
【问题描述】:

做一些考试复习。一个问题是,修改代码以使循环至少执行一次。

我的代码:

int x = 0;
while (x < 10) {
   if (x % 2 != 0) {
       System.out.println(x);
   }
   x++;
}

现在我知道当条件为真时 while 会循环,我知道我不能删除 x++,因为这会给我无限的零。我想我会删除 if 语句和与之相关的大括号。

你会同意吗?

int x = 0;
while (x < 10) {
    System.out.println(x);
    x++;
}

【问题讨论】:

  • 查看do-while 循环。
  • 你已经改变了输出——你确定这是允许的吗?
  • if 语句只打印奇数,因此删除它会改变所需的输出。
  • 我已经用 do -while 更新了主要问题,我将不得不对其进行处理以使其正常工作,这是唯一的修订版
  • 你改变了while条件,你想知道为什么你的输出不一样?

标签: java loops


【解决方案1】:

虽然这个特定的循环实际上至少执行一次,即使没有改变,但这不是 while 循环的属性。

如果while循环中的条件不满足,则循环永远不会执行。

do-while 循环的工作方式几乎相同,但条件是在循环执行后评估,因此,循环总是至少执行一次:

void Foo(bool someCondition)
{
    while (someCondition)
    {
        // code here is never executed if someCondition is FALSE
    }
}

另一方面:

void Foo(bool someCondition)
{
    do 
    {
        // code here is executed whatever the value of someCondition
    }
    while (someCondition) // but the loop is only executed *again* if someCondition is TRUE
}

【讨论】:

    【解决方案2】:

    我不同意,这会改变循环的基本目的(将每隔一个数字发送到标准输出)。

    考虑转换为 do/while 循环。

    【讨论】:

      【解决方案3】:

      虽然您的解决方案在技术上已经回答了这个问题,但我认为这不是他们想要的(这并不是您的错,在我看来,这是一个措辞不当的问题)。鉴于这是一道考试题,我认为他们在这里追求的是一个do while 循环。

      它的工作原理与 while 循环相同,只是在循环结束时检查了 while 条件 - 这意味着它将始终至少执行一次。


      示例:

      while(condition){
          foo();
      }
      

      这里先检查condition,然后如果conditiontrue,则执行循环,调用foo()

      而在这里:

      do{
          foo();
      }while(condition)
      

      循环执行一次,调用foo(),然后检查condition是否再次执行循环。


      更多:

      如需进一步阅读,您可能需要查看thisthis 关于whiledo whilefor 循环的教程。

      【讨论】:

        【解决方案4】:
        int x = 0;
                while (x <10){
                System.out.println(x);
                    x++;
                }
        

        会工作

        编辑:我认为其他 cmets 也是正确的,do/while 循环将强制执行一次代码

        【讨论】:

          【解决方案5】:
          var x = 0;
          do {
              if (x % 2 != 0) System.out.println(x);
              x++;
          } while (x < 10);
          

          【讨论】:

          • 那么,如果你真的注意到它破坏了程序,你到底为什么要把这个功能放在循环之外呢?
          • 是的,添加了打印语句以通过循环执行。不过,Jayseppi 并没有给出他对程序的期望,他认为删除循环的预期功能可以解决他的问题......
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-12
          • 1970-01-01
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          • 2017-01-11
          • 2023-04-02
          相关资源
          最近更新 更多