Java使用Scanner读取字符串与Double值时出现InputMismatchException如何解决
问题原因
- 终止判断逻辑顺序错误:
END_PRICES的终止判断放在了读取double值的代码之后,输入终止标记时,程序会先尝试读取不存在的double值,直接抛出InputMismatchException,根本走不到终止判断的代码行。 - 输入缓冲区处理逻辑存在瑕疵,换行符残留会干扰后续输入读取。
修复方案
调整逻辑顺序,先读取第一个字符串判断是否为终止标记,确认不是后再读取价格数值,修正后的代码如下:
Scanner input = new Scanner(System.in); ArrayList<String> fruitName = new ArrayList<>(); ArrayList<Double> fruitPrice = new ArrayList<>(); while(true) { String str = input.next(); // 先判断是否是终止标记,是则直接退出循环,不需要再读价格 if(str.equals("END_PRICES")) { break; } // 确认是正常水果数据,再读取价格 Double v = input.nextDouble(); fruitName.add(str); fruitPrice.add(v); // 清空当前行剩余的换行符等内容 input.nextLine(); }
验证说明
输入格式符合要求时,每一行的水果名和价格会被正常存入对应列表;输入END_PRICES时,程序会直接触发break终止循环,不会再尝试读取double值,也不会再抛出类型不匹配异常。
内容的提问来源于stack exchange,提问作者Tina
相关产品推荐
相关产品推荐

