Java循环-中断?继续?

4
我阅读了很多有关使用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);
  }
}

4
首先需要做的是修正格式。让你的IDE适当缩进代码,然后确保你的问题反映了这一点。 - Jon Skeet
你是说如果第一个循环“breaks”,你想跳过第二个for循环吗? - almightyGOSU
我的意图是运行第一个循环,然后如果一切正常且未找到负号符号,则运行第二个循环并打印字符串中的所有字符。 - Jesse Cleary
7个回答

3
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);
        }
    }
}

@JesseCleary 这很奇怪。你是否将 isValid 变量初始化为 true? - Eran
我已经按照你的建议粘贴了代码。事实上,如果我注释掉第一部分,只留下 Boolean isValid = true;,然后立即转到第二部分,在那里检查 if (c <= 9),它仍然不会打印字符串中的字符,这似乎很奇怪。 - Jesse Cleary
不,这并不奇怪。你可能想要使用 if (c <= '9'),因为字符 '9' 的数字值不是 9。 - ci_
@ci_ 很好的观点。我错过了那个。虽然不清楚为什么需要这个(部分)检查。如果目的是只允许数字,则应该在第一个循环中进行此检查,并在发现不是数字的字符时拒绝输入。 - Eran
我相信你是对的。目前代码确实可以告诉我是否有负号,但它仍会打印出所有字符,无论它是否是负号。 - Jesse Cleary
显示剩余3条评论

2

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


除非问题中提到方法,否则你不知道它包含了什么。 - ci_
同意。因此加上了“可能 - Phil Anderson

1
"

'break;'会停止当前循环的运行,而'continue;'会跳过当前循环中的迭代。

"
 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;”,前提是您的代码在函数中,并且它将跳过函数的其余部分,在这种情况下是“//更多其他代码”。

0

所有的答案都是好的,但如果你想重复提示直到获得有效值,你需要另一个循环来实现,使用标签:

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;
    }
}

0

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

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
}

0
 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...
 }

通过这种方式,可以避免不必要的循环和中断语句。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接