Java 循环 - 中断?继续?

Posted

技术标签:

【中文标题】Java 循环 - 中断?继续?【英文标题】:Java Loops - Break? Continue? 【发布时间】: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 循环“中断”出你的第一个循环,你想跳过它吗? 我的意图是运行第一个循环,然后如果有任何检查结果没有找到负号,运行第二个循环并打印字符串中的所有字符。 【参考方案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;
    

【讨论】:

以上是关于Java 循环 - 中断?继续?的主要内容,如果未能解决你的问题,请参考以下文章

C# 循环 - 中断与继续

中断内部 foreach 循环并继续外部 foreach 循环

Ractive.js 继续和中断循环

Go中使用“继续标签”与使用“中断”跳出内循环的区别

在 Kotlin 中的功能循环中,如何“中断”或“继续”?

do..while 循环中的继续和中断语句错误