Java:如何在for-loop中将try-catch作为条件?

时间:2010-04-27 23:59:08

标签: java for-loop conditional

我知道如何通过将大小与上限进行比较来解决问题,但我想要一个查找异常的条件。如果在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;}&&
                                   ^

2 个答案:

答案 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; (挥动它来触发变化)。