我正在编写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);
}
}
答案 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()
。但是,如果您使用useDelimiter
,useLocale
或useRadix
配置了扫描程序,它也会重置这些参数。 (见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);
}
}