Java奇怪BUG:将Weight改为double类型后出现输入交互异常
解决问答交互中输入串行的问题
这种问题我之前也碰到过好几次,大概率是输入流的换行符残留搞的鬼!
问题根源
当你用输入工具(比如Java的Scanner)读取double类型的数值时,用户输入完数字后按下的回车(\n)会留在输入缓冲区里。当下一次读取字符串类型的输入(比如下一个问题的回答)时,程序会直接把这个残留的换行符当成空输入,导致前一个问题的提示还没等用户输入,下一个问题的提示就直接打在了同一行。
两种快速修复方案
方案一:读取double后手动清空换行符
在读取完double类型的Weight后,额外调用一次读取整行的方法,把缓冲区里的换行符“吃掉”:System.out.print("请输入物品重量:"); double weight = scanner.nextDouble(); scanner.nextLine(); // 清除输入缓冲区中残留的换行符 // 接下来处理下一个问题的输入就正常了 System.out.print("请输入物品名称:"); String name = scanner.nextLine();方案二:先读字符串再转double
换一种读取方式,先读取完整的输入行,再转换成double类型,从根源上避免换行符残留:System.out.print("请输入物品重量:"); String weightInput = scanner.nextLine(); double weight = Double.parseDouble(weightInput); // 后续的输入读取不会受影响
额外排查点
如果上面的方法没用,再检查下你的输出语句:是不是用了System.out.print()而没加换行?如果前一个问题的提示没有换行,也可能导致和下一个问题挤在同一行,但这种情况一般不会是改了double才出现的,所以优先级靠后排查。
内容的提问来源于stack exchange,提问作者JenInCode
相关产品推荐
相关产品推荐

