Java 在try/catch块上循环?
我试图编写一个如下所示的try-catch块,但将其放入一个循环中。我的问题是,当我把它放在while循环中时,它会运行x次。我希望它在第一次尝试成功时停止。但可以选择最多运行3次Java 在try/catch块上循环?,java,exception,try-catch,Java,Exception,Try Catch,我试图编写一个如下所示的try-catch块,但将其放入一个循环中。我的问题是,当我把它放在while循环中时,它会运行x次。我希望它在第一次尝试成功时停止。但可以选择最多运行3次 try { myDisplayFile(); } catch (FileNotFoundException e1) { System.out.println("could not connect to that file..");
try {
myDisplayFile();
} catch (FileNotFoundException e1) {
System.out.println("could not connect to that file..");
e1.printStackTrace();
}
public static void myDisplayFile() throws FileNotFoundException{
Scanner kin = new Scanner(System.in);
System.out.print("Enter a file name to read from:\t");
String aFile = kin.nextLine();
kin.close();
Scanner fileData = new Scanner(new File(aFile));
System.out.println("The file " + aFile + " contains the following lines:");
while (fileData.hasNext()){
String line = fileData.next();
System.out.println(line);
}//end while
fileData.close();
}
int max_number_runs=3;
布尔成功=假;
对于(int num\u try=0;!success&&num\u try
int someCounter=0;
布尔完成=假;
while(someCounter<3&&!已完成){
试一试{
//可能引发异常的东西
完成=正确;
}抓住(一些例外){
//一些异常处理
someCounter++;
}
}
你可以break在try-catch
块中的code>将退出它所在的循环(不仅仅是try-catch
块),但是从可读性的角度来看,这个发布的代码可能更好
finished=true
应该是try
块的最后一行。它不会抛出异常。并且,只有当每隔一行try
块在没有异常的情况下执行时,它才会执行。因此,如果进入finished=true
,则不会抛出和异常,因此可以切换标志并退出循环
否则,如果抛出异常,finished=true代码>行将不会执行。您将处理异常,然后递增someCounter++
变量
从可读性的角度来看,这是理想的,因为所有可能的while
循环出口都标记在while
循环的条件部分。循环将继续,直到someCounter
太大,或者finished
返回true。因此,如果我正在阅读你的代码,我所要做的就是在你的循环中查找修改这些变量的部分,我可以很快理解循环逻辑,即使我还不了解循环正在做的一切。我不必寻找突破代码>语句。我希望我正确理解了您的问题。有个办法
int noOfTries = 0;
boolean doneWithMyStuff = false;
final int MAX_LOOP_VAL = 10;
int noOfLoops = 0;
while(noOfTries < 3 && noOfLoops < MAX_LOOP_VAL && !doneWithMyStuff) {
try {
// Do your stuff and check success
doneWithMyStuff = true;
}
catch (Exception e) {
noOfTries++;
e.printStackTrace();
}
finally {
// Close any open connections: file, etc.
}
noOfLoops++;
}
int noOfTries=0;
布尔donewithmysuff=false;
最终int MAX_LOOP_VAL=10;
int-noops=0;
while(noOfTries<3&&noOfLoops
int someCounter = 0;
boolean finished = false;
while(someCounter < 3 && !finished) {
try {
//stuff that might throw exception
finished = true;
} catch (some exception) {
//some exception handling
someCounter++;
}
}
int noOfTries = 0;
boolean doneWithMyStuff = false;
final int MAX_LOOP_VAL = 10;
int noOfLoops = 0;
while(noOfTries < 3 && noOfLoops < MAX_LOOP_VAL && !doneWithMyStuff) {
try {
// Do your stuff and check success
doneWithMyStuff = true;
}
catch (Exception e) {
noOfTries++;
e.printStackTrace();
}
finally {
// Close any open connections: file, etc.
}
noOfLoops++;
}