一个Scanner获取键盘输入的问题

ifupan 2012-05-16 09:10:06
代码如下:
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);
}
}

我的问题:
问题:
在输入图书价格,当我输入字母时,为什么程序会把下面的 请输入图书评分一起也捕捉异常执行掉,然后就结束了?
照我的程序过程应该是:在输入图书价格,当我输入字母时,程序只捕捉到输入价格时的异常;然后停在输入图书评分时,等待我输入。

求帮助
...全文
140 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
a395885670 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

因为Scanner匹配失败后,并没有把输入的信息直接扔掉,所以下次执行nextDouble()又取出了上次输入的内容。

要在异常捕捉中手工读取掉该段内容,类似:

try{
newPrice = scan.nextDouble();
} catch (InputMismatchException e) {
e.printStackTrace();
scan.next……
[/Quote]

也可以在catch块中 空调一次san.nextLine 跳过之前的输入 接受下次输入
xiaoyangming 2012-05-16
  • 打赏
  • 举报
回复
异常捕获处理机制就是防止程序出现异常时发生程序终止的,使用了try/catch语句后,程序异常被捕获处理,程序继续向下执行,而不会发生你所说的终止的现象
ifupan 2012-05-16
  • 打赏
  • 举报
回复
谢谢,我再试下
MiceRice 2012-05-16
  • 打赏
  • 举报
回复
因为Scanner匹配失败后,并没有把输入的信息直接扔掉,所以下次执行nextDouble()又取出了上次输入的内容。

要在异常捕捉中手工读取掉该段内容,类似:

try{
newPrice = scan.nextDouble();
} catch (InputMismatchException e) {
e.printStackTrace();
scan.next(); // 就是这句
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧