Java异常处理 - 执行循环

时间:2018-01-11 13:59:11

标签: java exception exception-handling

我正在编写Java异常处理程序并遇到以下问题。

当我输入无效输入时,无限循环开始执行而不是从try块开始执行。

public class Exception_Handling {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        boolean bl=true;
        do {

        try {
            int a = sc.nextInt();
            int b = sc.nextInt();
            bl=false;
        }
        catch(InputMismatchException ex) {
            System.out.println("Enter Valid Number Format");
            System.out.println(ex);
        }
        }while(bl);
    }   
}

2 个答案:

答案 0 :(得分:3)

在重新进入循环之前,需要刷新缓冲区。否则,java会一次又一次地尝试读取相同的输入。

import java.util.Scanner;

public class Exception_Handling {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        boolean bl=true;
        do {

            try {
                int a = sc.nextInt();
                int b = sc.nextInt();
                bl=false;
            }
            catch(Exception ex) {
                System.out.println("Enter Valid Number Format");
                System.out.println(ex);
                sc.next();
            }
        }while(bl);
    }   
}

您也可以在案例中使用sc.reset()代替sc.next()。但是,如果您使用useDelimiteruseLocaleuseRadix配置了扫描程序,它也会重置这些参数。 (见reset() java doc)

答案 1 :(得分:0)

Input Mismatch上有一个catch异常,因此不会执行此语句:

bl = false;

不会终止循环。

public class Exception_Handling {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner sc=new Scanner(System.in);
    boolean bl=true;
    do {

    try {
        bl=false;
        int a = sc.nextInt();
        int b = sc.nextInt();

    }
    catch(InputMismatchException ex) {
        System.out.println("Enter Valid Number Format");
        System.out.println(ex);

    }
    }while(bl);
}   

}