【问题标题】:Why can't this for loop be broken with 'break' or by exceeding limit? - Java为什么这个for循环不能用'break'或超过限制来打破? - 爪哇
【发布时间】:2018-04-07 05:59:16
【问题描述】:

我编写了一段 java 代码,它迭代地收集用户数据并询问一个 y/n 问题来中断或继续循环。但是代码似乎发生了分支:继续循环,同时还按顺序执行其余代码。

for(i = 0; i < alphabetLength; i++){

...

continueQuery = JOptionPane.showInputDialog("Another activity? (y/n)"); 
        if ("y".equals(continueQuery)) {
          }
        else if ("n".equals(continueQuery)){
            //i = i + 30; 
            //break;
        } 

【问题讨论】:

  • 我不明白这个问题。请详细说明并提供minimal reproducible example
  • 如果 elseif 条件评估为 false,代码继续循环的唯一方法。你输入的是大写的Nperhaps?
  • 当然。当我使用其中一种循环中断方法运行代码时,循环会继续,同时其余代码也会继续。我想知道为什么或如何改变。
  • 不,我认为这不是问题所在。我也只使用了没有条件的“else”而不是“else if”,它给了我相同的结果。

标签: java loops for-loop syntax


【解决方案1】:

你显然没有在这里展示整个画面,这让事情有待猜测和假设。这是一种非常糟糕的提问方式,但无论如何我都会给它一个戳。

使用 输入对话框 是一个奇怪的选项,用于简单地询问用户他或她是否想要使用另一个 Activity。您是否考虑过如果用户只是关闭强制它返回 null 的输入对话框会发生什么。通过仅仅关闭输入对话框,它应该被认为与输入 "n" ......还是应该被视为相同?如果用户输入“y”或“n”以外的任何内容,比如可能只是一个空格,该怎么办。那会发生什么?这里有很多事情需要考虑,还有……更多(不必要的)代码。

我认为您正在寻找的是 continue 关键字,它在 for 循环中导致循环在语句调用后跳过所有循环代码并立即跳转到该循环的下一次迭代:

for (int i = 0); i < alphabetLength; i++) {
    ..............................            
    ..............................            
    String continueQuery = JOptionPane.showInputDialog("Another activity? (y/n)"); 
    if ("y".equals(continueQuery)) { 
        continue; 
    }
    else if ("n".equals(continueQuery) || continueQuery == null){
        break;
    } 
    ..............................            
    ..............................           
}

请注意我如何在 else if 中添加条件,用户只需关闭输入对话框窗口即可。哦,如果您希望流程在提供 "n" 时跳出 for 循环,那么只需取消注释 break 语句.

当然,如果对输入对话框的调用是 for 循环中的最后一个代码,那么您将不需要 continue 语句,您不需要检查“ y”,因为无论如何下一次迭代都会自动发生。你只需要:

if ("n".equals(continueQuery) || continueQuery == null){
            break;
} 

正如我之前所说,使用 输入对话框 是用于此类提示的一个奇怪选项,因为用户只需要输入 "y"“n” 表示 。更好的选择是使用简单的Confirm Dialog 代替,因为用户可以选择YesNo,也许还有Cancel 按钮,如果你喜欢,像这样:

for (int i = 0); i < alphabetLength; i++) {
    ..............................            
    ..............................            
    int userOption = JOptionPane.showConfirmDialog(null, "Would you like another Activity?", 
            "Another Activity?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
    if (userOption == JOptionPane.YES_OPTION) { 
        continue;
    }
    else if (userOption == JOptionPane.NO_OPTION) { 
        break;
    }
    ..............................            
    ..............................           
}

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 2015-11-25
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    • 2020-10-05
    • 2023-01-22
    • 1970-01-01
    相关资源
    最近更新 更多