【问题标题】:Choose to loop infinitely if a number equals 0 or loop until some number if that number is greater than 0 - Java如果数字等于0,则选择无限循环,如果该数字大于0,则选择循环直到某个数字-Java
【发布时间】:2015-02-23 04:15:23
【问题描述】:

如果数字等于 0,我想使用 for 循环无限循环,如果数字大于 0,则循环直到该数字。这是帮助直观显示我所得到的代码的代码。

    for (int i = 0; i < this.getNumRounds(); i++) {
        // 30 some lines of code
    }

    for ( ; ; ) {
        // 30 some lines of code
    }

如果getNumRounds() 大于0,则执行第一个循环,如果等于0,则执行第二个循环。我宁愿这样做而不复制和粘贴我的 30 几行代码两次并使用 if 语句看到代码是多余的,虽然我可以使用一个函数来消除这种冗余,但我想看看是否有另一种选择。

【问题讨论】:

  • 我只需将 30 行代码重构为一个函数并使用 if-else。它会使代码更清晰。代码应该是自记录的,因此如果您对问题的描述包含“if-else”(就像您的描述一样),那么将其转换为代码的最清晰方法是使用 if-else。

标签: java loops if-statement for-loop


【解决方案1】:

使用强大的三元运算符:

for (int i = 0; this.getNumRounds() == 0 ? true : i < this.getNumRounds(); i++) {
    // 30 some lines of code
}

正如 yshavit 在 cmets 中所述,有一种更短、更简洁的表达方式:

for (int i = 0; this.getNumRounds() == 0 || i < this.getNumRounds(); i++) {
    // 30 some lines of code
}

【讨论】:

    【解决方案2】:

    您是否考虑过使用 while 循环来代替?

    int i = 0;
    while(i < this.getNumRounds() || this.getNumRounds() == 0) {
    //some 30 lines code
    i++
    }
    

    【讨论】:

      【解决方案3】:

      所以你想要这样的东西:

      int num = //whatever your number equals
      if (num == 0) {
          boolean running = true;
          while (running) {
              doLoop();
          }
      } else {
          for (int i = 0; i < num; i++) {
              doLoop();
          }
      }
      
      private void doLoop() {
          //some 30 lines of code
      }
      

      此代码将循环的内容放在一个单独的方法中,并检查数字是否等于 0。如果是,程序将永远运行 doLoop() 方法。否则,它会运行直到 i 等于数字。

      【讨论】:

        【解决方案4】:

        虽然最好只创建一个方法并使用 if 语句,但您可以在 for 循环中添加一个 if 语句来减少每次迭代的 i。它看起来像:

        for (int i = 0; i <= this.getNumRounds(); i++) {
            if(this.getNumRounds() == 0){
                i--;
            }
            // 30 some lines of code
        }
        

        请注意,我将 i &lt; this.getNumRounds() 更改为 i &lt;= this.getNumRounds。这样,如果轮数为零,则将调用循环。

        【讨论】:

          【解决方案5】:

          您可以执行以下操作。

          for (int i = 0; i < this.getNumRounds() || i == 0; ++i) {
              do {
                  // 30 lines of code
              } while (this.getNumRounds() == 0);
          }
          

          如果getNumRounds 计算起来并不简单,请考虑将其拉出循环并仅调用一次。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-26
            • 1970-01-01
            • 1970-01-01
            • 2019-01-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-15
            相关资源
            最近更新 更多