代码如下:
import java.util.*;
class Question2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
sop("");
sop("请输入图书价格!");
double newPrice = 0;
try{
newPrice = scan.nextDouble();
}
catch (InputMismatchException e) {
e.printStackTrace();
}
sop("");
sop("请输入图书评分!");
double newScore = 0;
try{
newScore = scan.nextDouble();
}
catch (Exception e1) {
e1.printStackTrace();
}
}
public static void sop(Object obj) {
System.out.println(obj);
}
}
我的问题:
问题:
在输入图书价格,当我输入字母时,为什么程序会把下面的 请输入图书评分一起也捕捉异常执行掉,然后就结束了?
照我的程序过程应该是:在输入图书价格,当我输入字母时,程序只捕捉到输入价格时的异常;然后停在输入图书评分时,等待我输入。
求帮助
------解决方案--------------------
因为Scanner匹配失败后,并没有把输入的信息直接扔掉,所以下次执行nextDouble()又取出了上次输入的内容。
要在异常捕捉中手工读取掉该段内容,类似:
try{
newPrice = scan.nextDouble();
} catch (InputMismatchException e) {
e.printStackTrace();
scan.next(); // 就是这句
}