日期:2014-05-20  浏览次数:20679 次

一个Scanner获取键盘输入的问题
代码如下:
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(); // 就是这句
}