【问题标题】:Restart current iteration in 'for' loop java在'for'循环java中重新启动当前迭代
【发布时间】:2012-10-26 15:22:38
【问题描述】:

我有一个 for 循环,它要求用户输入一个数字,然后用它做 10 次

我想要一个内置的检查,如果用户输入了一个不被接受的输入,循环应该重新开始它的当前迭代

例如,如果用户在第 3 轮中输入错误,则应重新开始第 3 轮。

我该怎么做? java中有没有类似REDO语句的东西?

【问题讨论】:

  • 好的,你尝试了什么?
  • 你和this guy上同一所学校吗?
  • 使用do-while 循环,而不是for 循环。

标签: java for-loop


【解决方案1】:

类似的东西?

for(int i=0; i<10; i++){
   if(input wrong){
     i=i-1;
   }

}

【讨论】:

  • 这就是我所做的,只是想知道是否有更优雅的方式。
  • @Killerpixler 是的,使用do-while 循环而不是减小i 值。
  • 我认为在循环内更改循环控制变量的值往往会令人困惑。在这种情况下很简单,但在一个大循环中,发生的事情可能并不明显。我更喜欢@Mik378 发布的答案:使用内部循环重新提示输入,直到收到有效输入。
  • @DaveCosta 对于大型循环来说绝对正确。但是你不觉得嵌套循环有点贵吗??
  • @chaitanya10 拥有这种内部循环并不会降低性能。
【解决方案2】:

这里有几个选择。

继续 Java 中的 continue 语句告诉循环返回其起点。但是,如果您使用的是 for 循环,这将继续到下一次迭代,这可能不是您想要的,因此使用 while 循环实现效果更好:

int successfulTries = 0;
while(successfulTries < 10)
{
    String s = getUserInput();
    if(isInvalid(s))
        continue;

    successfulTries++;
}

递减 这种方法对我来说似乎很难看,但是如果您想使用 for 循环完成任务,则可以在检测到错误输入时减少 for 循环中的计数器(本质上是“重做”)。

for(int i = 0; i < 10; i++)
{
    String s = getUserInput();
    if(isInvalid(s))
    {
        i--;
        continue;
    }
}

我建议您使用 while 循环。

【讨论】:

    【解决方案3】:

    最好避免重新分配i 变量,这可能会导致混淆。

     for(int i=0; i<10; i++){
          String command = null;
          do{
            command = takeCommandFromInput();
          } while(isNotValid(command));
          process(command);
      }
    

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多