繁体   English   中英

循环遍历try / catch块?

[英]looping over a try/catch block?

我试图像下面这样编写一个try catch块,但是把它放在一个循环中。 我的问题是,当我把它放在while循环中时,它会运行x次。 我希望它在第一次尝试成功时停止。 但是可以选择最多运行3次。

    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;
boolean success = false;

for( int num_try = 0 ; !success && num_try < max_number_runs ; num_try++ )
{
    try
    {
        /* CODE HERE */
        success = true;
    }
    catch( Exception e )
    {

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

你可以break; try catch块中,它将退出它所在的循环(不仅仅是try catch块),但从可读性的角度来看,这个发布的代码可能会更好。

finished = true应该是try块的最后一行。 它不会抛出异常。 并且只有在try块的每隔一行执行且没有exception时才会执行。 因此,如果你得到finished = true ,你没有抛出异常,所以你可以切换你的标志并退出循环。

否则,如果抛出异常,则finished = true; 行不会执行。 你将处理异常,然后增加someCounter++变量。

这是从可读性的角度来看,因为所有可能的理想while退出循环被标记在的条件部分while循环。 循环将继续,直到someCounter过大,或finished返回true。 因此,如果我正在阅读您的代码,我所要做的就是通过循环查看修改这些变量的部分,并且我可以快速理解循环逻辑,即使我还不了解循环所做的一切。 我没有必要去break; 声明。

我希望我能正确理解你的问题。 这是一种方式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM