java - 为什么用户输入双打不接受与常规双打相同的参数?
问题描述
我目前是 Java 的初学者,我偶然发现了一些让我有点吃惊的东西。
使用扫描仪,我尝试创建一个允许我比较 2 个数字的程序。如:
num1 > num2
num2 < num1
num1 == num2
诸如此类。
我打算使用双精度数,因为它允许各种数字,从整数到小数。问题是每当我在控制台问我时输入一个数字时;如果数字有一个句号,它会给我一个不匹配的异常错误。我尝试通过实现一个scanner.nextLine()来克服这个问题;或 nextDouble() 之前的 (double); 方法。但这没有用。有人可以帮帮我吗?如果我对问题的解释不够好,我会尝试进一步解释,这是我第一次使用这个网站。
public static void numeralComparison() {
Scanner scanner = new Scanner(System.in);
System.out.println("Input the first number. Use a comma to indicate decimal points: ");
double num1 = (double) scanner.nextDouble();
scanner.nextLine();
System.out.println("Input the second number: ");
double num2 = (double) scanner.nextDouble();
scanner.nextLine();
if(num1 < num2) {
System.out.println(num1 + " < " + num2);
} else if (num2 < num1) {
System.out.println(num2 + " < " + num1);
} else {
System.out.println(num1 + " = " + num2);
}
scanner.close();
}
如果我为控制台提供了数字“30,0”,它就可以工作。它没有抛出异常。但是,例如,如果我要为它提供“30.0”,它会抛出一个 InputMismatch 异常。
JDK 规范:Corretto 11、IntelliJ IDEA
解决方案
nextDouble
尊重您的语言环境设置(即使用哪个字符作为小数分隔符)并默认为Locale.getDefault
. 但是您可以通过 告诉使用Scanner
哪个。Locale
useLocale
由于您似乎正在寻找英式小数,因此您可以scanner.useLocale(Locale.ENGLISH)
在读取输入之前设置:
public static void numeralComparison() {
Scanner scanner = new Scanner(System.in);
scanner.useLocale(Locale.ENGLISH);
System.out.println("Input the first number. Use a comma to indicate decimal points: ");
double num1 = (double) scanner.nextDouble();
scanner.nextLine();
System.out.println("Input the second number: ");
double num2 = (double) scanner.nextDouble();
scanner.nextLine();
if (num1 < num2) {
System.out.println(num1 + " < " + num2);
} else if (num2 < num1) {
System.out.println(num2 + " < " + num1);
} else {
System.out.println(num1 + " = " + num2);
}
scanner.close();
}
推荐阅读
- css - 如何将 DIV 与其容器底部对齐?
- python - 蟒蛇:名称错误:名称
- ionic3 - 如何在ionic3中调用没有表单数据的POST API?
- javascript - Cordova 中的 URL 添加了感叹号
- android - Lottie 动画编译不工作 - 为什么?
- apache-spark - 写入外部 Hive 表时的 Spark 压缩
- java - Java并发 - 线程未完成循环
- symfony - 没有斜杠的 Twig 命名空间路径在本地计算机(Mac)上有效,但在服务器上无效
- java - List的Hibernate映射
“不是实体” - c# - 在 IASyncResult 中为 Ping 捕获异常