【问题标题】:Java Loops - Break? Continue?Java 循环 - 中断?继续?
【发布时间】:2015-06-04 12:28:01
【问题描述】:

我已经阅读了一堆关于使用breakcontinue 的线程,我怀疑问题不一定是我对它们的使用,而是我的循环布局。在下面的代码中,我试图遍历用户输入的字符串中的字符以查找任何- 符号。如果找到,它将向用户抛出一个错误,指出找到负数并退出。否则,如果它没有找到- 符号,它应该打印出字符串中的所有字符。

我在第一个循环结束时使用break 来找到- 符号,但它没有继续到下一个循环。我也试过continue,但没用。循环对我来说是新的,所以我可能完全错了,我只知道我的第一个循环工作正常,当它在字符串中找到 - 时会抛出错误。

strNum1 = JOptionPane.showInputDialog ("Enter Number String");
for (int i = 0; i < strNum1.length(); i++) {
  char c = strNum1.charAt(i);
  if (c == '-') {
    System.out.println("Negative Digit Found - Exiting");
    break;
  }
}

for (int i = 0; i < strNum1.length(); i++) {
  char c = strNum1.charAt(i);
  if (c <= 9) {
    System.out.println(c);
  }
}

【问题讨论】:

  • 首先要做的是修复格式。让您的 IDE 适当地缩进代码,然后确保您的问题反映了这一点。
  • 你是说如果第二个 for 循环“中断”出你的第一个循环,你想跳过它吗?
  • 我的意图是运行第一个循环,然后如果有任何检查结果没有找到负号,运行第二个循环并打印字符串中的所有字符。

标签: java for-loop break continue


【解决方案1】:

break 语句只从第一个循环开始。为了在找到- 字符时跳过运行第二个循环,您可以使用一些boolean 变量来指示是否应该运行第二个循环:

strNum1 = JOptionPane.showInputDialog ("Enter Number String");
boolean isValid = true;
for (int i=0; i<strNum1.length(); i++) {
        char c = strNum1.charAt(i);
        if (c == '-'){
            System.out.println("Negative Digit Found - Exiting");
            isValid = false;
            break;
        }
}
if (isValid) {
    for (int i=0; i<strNum1.length(); i++) {
        char c = strNum1.charAt(i);
        if (c <= '9'){
            System.out.println(c);
        }
    }
}

【讨论】:

  • 我喜欢这种方法。但是我确实注意到,虽然它会找到负号并显示错误消息,但如果没有负号,它不会打印字符串中的字符。即使我把休息时间拿出来;它不会进入第二部分中对isValid 的检查。
  • @JesseCleary 这很奇怪。您是否将 isValid 变量初始化为 true?
  • 我做到了,我完全按照您的建议粘贴了代码。事实上,如果我注释掉第一部分并留下Boolean isValid = true;,然后立即转到第二部分检查if (c &lt;= 9),它仍然不会打印字符串中的字符,这看起来很奇怪。
  • 不,这并不奇怪。您可能想做if (c &lt;= '9'),因为字符'9' 的数值不是9。
  • @ci_ 好点。我错过了。虽然不清楚为什么这个(部分)检查是必要的。如果目的是只允许数字,则此检查可能应该在第一个循环中,如果发现不是数字的字符,则拒绝输入。
【解决方案2】:

如果您将break 替换为return,它将退出整个方法。听起来这可能就是你想要的。

【讨论】:

  • 除非问题中没有方法的迹象,所以你不知道它还有什么。
  • 同意。因此“可能
【解决方案3】:

'打破;'将停止它所在的循环运行,其中“继续;”将跳过循环中的当前“迭代”。

 for(int x = 0; x < 10; x++)
 {
     if (x == 5)
        break;
      // other code
 }
 // more other code

这将在 x == 5 后退出循环,并且不会执行第 6 到第 10 次迭代。

 for(int x = 0; x < 10; x++)
 {
     if (x == 5)
        break;
      // other code
 }
 // more other code

除了第 6 次迭代之外,这将执行每次迭代。

但是如果你想跳过'//更多其他代码',那么你需要使用'return;',前提是你的代码在一个函数中,它会跳过函数的其余部分,其中这种情况是'//更多其他代码'。

【讨论】:

    【解决方案4】:

    如果您不想在第一个循环之后执行第二个循环,请使用 return 语句而不是 break。

    【讨论】:

      【解决方案5】:

      你没有说数字是否应该是整数,所以我假设是的。 如果是这样,那么验证输入的更好方法是:

      int num1;
      
      try {
        num1 = Integer.parseInt(strNum1);
      catch (NumberFormatException e) {
        //not a valid number, complain about it
      }
      
      if (num1<0) {
        //negative number not allowed, complain about it
      }
      

      【讨论】:

        【解决方案6】:
         for (int i=0; i<strNum1.length(); i++) {
            char c = strNum1.charAt(i);
                 if (c == '-'){
                    System.out.println("Negative Digit Found - Exiting");
                break;
                }
         }
        

        可以修改为

         if(strNum1.charAt(0) != '-'){
           for (int i=0; i<strNum1.length(); i++) {
            char c = strNum1.charAt(i);
            if (c <= 9){
                System.out.println(c);
            }
           }
         }
        else {
         //negative number found...
         }
        

        这样就可以避免不必要的for循环和break语句

        【讨论】:

          【解决方案7】:

          所有答案都很好,但是如果您想重复提示直到获得有效值, 为此,您将需要另一个循环,使用标签:

          negative: while(true) {
              strNum1 = JOptionPane.showInputDialog ("Enter Number String");
              for (int i=0; i<strNum1.length(); i++) {
                  char c = strNum1.charAt(i);
                  if (c == '-'){
                      System.out.println("Negative Digit Found - Exiting");
                  continue negative;
                  }
              break negative;
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2010-09-05
            • 2020-06-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-18
            • 2011-03-15
            相关资源
            最近更新 更多