Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么用户输入双精度计数器不接受与常规双精度计数器相同的参数?_Java_Double_Java.util.scanner_Mismatch - Fatal编程技术网

Java 为什么用户输入双精度计数器不接受与常规双精度计数器相同的参数?

Java 为什么用户输入双精度计数器不接受与常规双精度计数器相同的参数?,java,double,java.util.scanner,mismatch,Java,Double,Java.util.scanner,Mismatch,说到Java,我目前还是一个初学者,我偶然发现了一些让我有点吃惊的东西 使用扫描仪,我试图创建一个程序,允许我比较两个数字。例如: num1 > num2 num2 < num1 num1 == num2 num1>num2 num2

说到Java,我目前还是一个初学者,我偶然发现了一些让我有点吃惊的东西

使用扫描仪,我试图创建一个程序,允许我比较两个数字。例如:

num1 > num2
num2 < num1
num1 == num2
num1>num2
num2
诸如此类

我打算使用double,因为它允许各种各样的数字,从整数到小数。问题是,每当我向控制台输入一个数字时,它会问我;如果数字有一个句号,它会给我一个不匹配的异常错误。我试图通过实现scanner.nextLine()来克服这个问题;或者在下一个double()之前加一个(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();

}
公共静态比较(){
扫描仪=新的扫描仪(System.in);
System.out.println(“输入第一个数字,用逗号表示小数点:”);
double num1=(double)scanner.nextDouble();
scanner.nextLine();
System.out.println(“输入第二个数字:”);
double num2=(double)scanner.nextDouble();
scanner.nextLine();
如果(num1
如果我为控制台提供了数字“30,0”,它就工作了。它没有抛出异常。然而,例如,如果我给它提供“30.0”,它会抛出一个InputMismatch异常

JDK规范:Corretto 11,IntelliJ IDEA

按如下方式执行:

Scanner scanner = new Scanner(System.in);
scanner.useLocale(Locale.getDefault());

nextDouble
尊重您的区域设置(即使用哪个字符作为十进制分隔符)并默认为。但是,您可以通过via告诉
扫描仪
使用哪个
区域设置

由于您似乎在寻找英语形式的小数,因此可以在读取输入之前设置
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();
}
公共静态比较(){
扫描仪=新的扫描仪(System.in);
scanner.useLocale(Locale.ENGLISH);
System.out.println(“输入第一个数字,用逗号表示小数点:”);
double num1=(double)scanner.nextDouble();
scanner.nextLine();
System.out.println(“输入第二个数字:”);
double num2=(double)scanner.nextDouble();
scanner.nextLine();
如果(num1
听起来像是区域设置问题。扫描仪的区域设置将定义十进制分隔符。例如,如果要将十进制分隔符更改为
,请将区域设置更改为使用句点作为十进制分隔符的国家/地区

例:


谢谢你的澄清。谢谢。但我仍然有一个问题,即使它不匹配区域设置,也不应该给出错误。30.0不应该仍然处于双区域吗?我不明白为什么它会接受300而不是30.0,因为它们是一样的。不知道你的意思。如果不用作十进制分隔符,则“.”通常用作千位分隔符,即用于写入“30.000”而不是“30000”。IMHO“30.0”既无效,也与“300”不同。
scanner.useLocale(Locale.CANADA);