我知道如何通过将大小与上限进行比较来解决问题,但我想要一个查找异常的条件。如果在conditinal中发生异常,我想退出。
import java.io.*;
import java.util.*;
public class conditionalTest{
public static void main(String[] args){
Stack<Integer> numbs=new Stack<Integer>();
numbs.push(1);
numbs.push(2);
for(int count=0,j=0;try{((j=numbs.pop())<999)}catch(Exception e){break;}&&
!numbs.isEmpty(); ){
System.out.println(j);
}
// I waited for 1 to be printed, not 2.
}
}
有些错误
javac conditionalTest.java
conditionalTest.java:10: illegal start of expression
for(int count=0,j=0;try{((j=numbs.pop())<999)}catch(Exception e){break;}&&
^
conditionalTest.java:10: illegal start of expression
for(int count=0,j=0;try{((j=numbs.pop())<999)}catch(Exception e){break;}&&
^
答案 0 :(得分:6)
您不应将Exception
用于正常控制流,并且不能将语句用作循环终止条件,该条件必须为boolean
< EM>表达
在这种特殊情况下,您似乎可以使用!numbs.isEmpty() && (j=numbs.pop()) < 999
。这是有效的,因为&&
是短路的,如果左手是false
,它将不会评估右手(会抛出Exception
),因为不需要:尽管如此,总体表达还是false
。
这种&&
短路也可以在这样的结构中得到利用:
if (s != null && s.startsWith("prefix")) { ...
答案 1 :(得分:-1)
另一种方法是简单地在for循环中使用try-catch,并使用for运行一定次数。
示例:
for (int i = 0; i < 1000; i++) {
try {
// do risky stuff that might not work
}
catch (Exception e) {
break;
} // end catch
} // end for loop.
会发生什么: 要么你的时间用完了(int我大于1000并且循环自然地断开),或者你尝试过的这次没有工作,所以捕获并且&#34;打破&#34;叫(踢出你的for循环)。
另一种方法是使用while循环,例如:
int number = 10;
boolean badStuff = false;
while (!badStuff) {
// do stuff you want
number = number--; // reassign the number to 9, then 8, then 7, and so on.
if (number = 1) {
badStuff = true; // or you could skip having a boolean at all and just call break
}
} // end while loop
只要!badStuff被评估为true(即你将坏东西宣布为false,所以!badStuff将为真),循环将继续。在循环内你可以设置&#34; badStuff = true&#34;在if语句中控制何时退出。每次循环运行时,它都会检查!badStuff然后循环中的if语句。这里badStuff是一个布尔值(即总是真或假),在这种情况下称为&#34;标志&#34; (挥动它来触发变化)。