为什么用户输入替身不接受与常规替身相同的参数?
How come user input doubles do not accept the same parameters as a regular double?
我目前是 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
. But you can tell the Scanner
which Locale
to use via 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();
}
听起来像是区域设置问题。扫描仪的区域设置将定义小数点分隔符。例如,如果您想将小数点分隔符更改为 .
,请将区域设置更改为使用句点作为小数点分隔符的国家/地区。
例如:
scanner.useLocale(Locale.CANADA);
我目前是 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
. But you can tell the Scanner
which Locale
to use via 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();
}
听起来像是区域设置问题。扫描仪的区域设置将定义小数点分隔符。例如,如果您想将小数点分隔符更改为 .
,请将区域设置更改为使用句点作为小数点分隔符的国家/地区。
例如:
scanner.useLocale(Locale.CANADA);