Java 循环 - 中断?继续?
Posted
技术标签:
【中文标题】Java 循环 - 中断?继续?【英文标题】:Java Loops - Break? Continue? 【发布时间】:2015-06-04 12:28:01 【问题描述】:我已经阅读了一堆关于使用break
和continue
的线程,我怀疑问题不一定是我对它们的使用,而是我的循环布局。在下面的代码中,我试图遍历用户输入的字符串中的字符以查找任何-
符号。如果找到,它将向用户抛出一个错误,指出找到负数并退出。否则,如果它没有找到-
符号,它应该打印出字符串中的所有字符。
我在第一个循环结束时使用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 <= 9)
,它仍然不会打印字符串中的字符,这看起来很奇怪。
不,这并不奇怪。您可能想做if (c <= '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 循环 - 中断?继续?的主要内容,如果未能解决你的问题,请参考以下文章