我有以下代码:
Scanner in = new Scanner(System.in);
while (in.hasNextDouble()) {
System.out.println(Double.parseDouble(in.nextLine()));
}
输入:
1.1
2.2
3.3
程序在读取此输入后停止,而我认为它仍应从输入读取。 那是为什么?
答案 0 :(得分:4)
问题可能是您的默认语言环境使用逗号作为分隔符 Double.parseDouble() - 始终使用点作为分隔符 in.nextDouble() - 使用您的区域设置指定的分隔符 结果是其中一个方法可以使用逗号作为分隔符,而另一个使用点。
要解决这个问题,您应该统一从输入中读取/解析双打的方法,并确定要使用的分隔符。
您可以设置分隔符的类型,例如使用:
1. 点分隔符:
Scanner in = new Scanner(System.in);
in.useLocale(Locale.ENGLISH);
或:
Scanner in = new Scanner(System.in);
in.useDelimiter("\\.");
2。 逗号分隔符:
Scanner in = new Scanner(System.in);
in.useLocale(Locale.FRENCH);
或
Scanner in = new Scanner(System.in);
in.useDelimiter(",");
重构你的代码:
Scanner in = new Scanner(System.in);
in.useLocale(Locale.ENGLISH);
while (in.hasNextDouble()) {
System.out.println(Double.parseDouble(in.nextLine()));
}
要清楚地看到问题,您可以使用以下代码:
Locale.setDefault(Locale.FRANCE);
Scanner in = new Scanner(System.in);
System.out.println(in.hasNextDouble());
Double.parseDouble(in.nextLine());
输入:1,1
hasNextDouble()的结果为true,而 Double.parseDouble(in.nextLine())会抛出NumberFormatException。
希望它有所帮助。