在上一节中,向字典中添加了商品信息,其中商品编号作为字典的Key值。
若重复输入了商品编号,会是如下结果:
请输入三条商品信息:
请输入第1条信息:
请输入商品编号:
s001
请输入商品名称:
冰箱
请输入商品价格:
5000
请输入第2条信息:
请输入商品编号:
s001
请输入商品名称:
电视机
请输入商品价格:
3000
请输入第3条信息:
请输入商品编号:
s003
请输入商品名称:
洗衣机
请输入商品价格:
6000
商品的全部信息为:
商品编号:s003, 商品名称:洗衣机, 商品价格:6000.0
商品编号:s001, 商品名称:电视机, 商品价格:3000.0
可看到同一商品编号,只添加成功了第二次输入的信息。
现对该情况进行优化:
while(i < 3){
System.out.println("请输入第" + (i+1) + "条信息:");
System.out.println("请输入商品编号:");
String goodsId = console.next();
//判断当前输入的goodsId在goodMap中是否已经存在
if(goodsMap.containsKey(goodsId)){
System.out.println("该商品编号已经存在!请重新输入!");
continue;
}
System.out.println("请输入商品名称:");
String goodsName = console.next();
System.out.println("请输入商品价格:");
double goodsPrice = console.nextDouble();
Goods goods = new Goods(goodsId, goodsName, goodsPrice);
//将商品信息添加到HashMap中
goodsMap.put(goodsId, goods);
i ++;
}
输出:
请输入三条商品信息:
请输入第1条信息:
请输入商品编号:
s001
请输入商品名称:
电视机
请输入商品价格:
3000
请输入第2条信息:
请输入商品编号:
s001
该商品编号已经存在!请重新输入!
请输入第2条信息:
请输入商品编号:
若将商品价格的格式输入错误,将会报出如下错误:
请输入商品价格:
dfbv
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
at java_set.GoodsTest.main(GoodsTest.java:26)
使用try-catch抛出异常:
while(i < 3){
System.out.println("请输入第" + (i+1) + "条信息:");
System.out.println("请输入商品编号:");
String goodsId = console.next();
//判断当前输入的goodsId在goodMap中是否已经存在
if(goodsMap.containsKey(goodsId)){
System.out.println("该商品编号已经存在!请重新输入!");
continue;
}
System.out.println("请输入商品名称:");
String goodsName = console.next();
System.out.println("请输入商品价格:");
double goodsPrice;
try{
goodsPrice = console.nextDouble();
}catch(java.util.InputMismatchException e){
System.out.println("商品价格的格式不正确,请输入数值型数据!");
continue;
}
Goods goods = new Goods(goodsId, goodsName, goodsPrice);
//将商品信息添加到HashMap中
goodsMap.put(goodsId, goods);
i ++;
}
输出:
请输入三条商品信息:
请输入第1条信息:
请输入商品编号:
s001
请输入商品名称:
电视机
请输入商品价格:
dgf
商品价格的格式不正确,请输入数值型数据!
请输入第1条信息:
请输入商品编号:
请输入商品名称:
电视机
请输入商品价格:
3000
请输入第2条信息:
请输入商品编号:
s002
请输入商品名称:
冰箱
请输入商品价格:
5000
请输入第3条信息:
请输入商品编号:
s003
请输入商品名称:
洗衣机
请输入商品价格:
5000
商品的全部信息为:
商品编号:dgf, 商品名称:电视机, 商品价格:3000.0
商品编号:s003, 商品名称:洗衣机, 商品价格:5000.0
商品编号:s002, 商品名称:冰箱, 商品价格:5000.0
可看到,当输入错误重新输入时,直接跳过了商品编号的输入,而结果是跳过的商品编号对应了之前输入错误的信息,需要再次添加一句接收数据的语句:
try{
goodsPrice = console.nextDouble();
}catch(java.util.InputMismatchException e){
System.out.println("商品价格的格式不正确,请输入数值型数据!");
console.next();
continue;
}
输出:
请输入三条商品信息:
请输入第1条信息:
请输入商品编号:
s001
请输入商品名称:
电视机
请输入商品价格:
3000
请输入第2条信息:
请输入商品编号:
s002
请输入商品名称:
冰箱
请输入商品价格:
3000
请输入第3条信息:
请输入商品编号:
s003
请输入商品名称:
洗衣机
请输入商品价格:
df
商品价格的格式不正确,请输入数值型数据!
请输入第3条信息:
请输入商品编号:
s003
请输入商品名称:
洗衣机
请输入商品价格:
5000
商品的全部信息为:
商品编号:s003, 商品名称:洗衣机, 商品价格:5000.0
商品编号:s002, 商品名称:冰箱, 商品价格:3000.0
商品编号:s001, 商品名称:电视机, 商品价格:3000.0