java 使用双精度扫描仪时出错

Error in java using Scanner with double

我刚开始学习java,我不能自己解决一个错误。 我写了一段代码,目的是将"double"类型的两个变量之间的运算结果转换为整数:

import java.util.Scanner;

public class SommaApprossimata {

    public static void main(String[] args) {

        Scanner input = new Scanner(System. in );

        double n1, n2;

        int risultato;

        System.out.println("Inserisci due numeri frazionari:");

        n1 = input.nextDouble();

        n2 = input.nextDouble();

        risultato = (int) n1 + (int) n2;

        System.out.print("Il risultato è: " + risultato);

    }

}

所以我有两个"double"类型的变量(n1和n2),运算结果(risultato)必须以整数表示。

错误是:

Exception in thread "main" java.util.InputMismatchException

如果我不使用 Scanner,则转换有效!

public class SommaApprossimataSemplice {

    public static void main(String[] args) {

        double n1, n2;

        int risultato;

        n1 = 3.3;

        n2 = 4.5;

        risultato = (int) n1 + (int) n2;

        System.out.print("Il risultato è: " + risultato);

    }

}

你能给我解释一下吗?提前致谢!

这可能是一个本地化问题(您当前的语言似乎是意大利语),小数点是逗号而不是点。尝试设置 LocaleScanner:

Scanner input = new Scanner(System.in);
input.useLocale(Locale.ENGLISH);

或者,您可以将输入作为 3,3 而不是 3.3

您的代码似乎没有错误。

java.util.InputMismatchException

如果您在 运行 程序时提供了错误的输入,例如字符串值而不是数值,则可能会发生此错误。

import java.util.Scanner;

public class SommaApprossimata {

    public static void main(String[] args) {

        Scanner input = new Scanner(System. in );

        double n1, n2;

        int risultato;

        System.out.println("Inserisci due numeri frazionari:");

        n1 = input.nextDouble();

        n2 = input.nextDouble();

        risultato = (int) n1 + (int) n2;

        System.out.print("Il risultato è: " + risultato);

    }

}

Output :

//save as : SommaApprossimata.java
//compile as :javac SommaApprossimata.java
//run as : java SommaApprossimata 

Inserisci due numeri frazionari:
2.0
3.0
Il risultato Φ: 5

因为我有 运行 代码,它可以正确地给出输出。

但是,如果您收到 java.util.InputMismatchException 错误,则可能是您输入的格式不是双精度。

看看-

Inserisci due numeri frazionari:
abcd
Exception in thread "main" java.util.InputMismatchException
        at java.util.Scanner.throwFor(Unknown Source)
        at java.util.Scanner.next(Unknown Source)
        at java.util.Scanner.nextDouble(Unknown Source)
        at d.main(d.java:16)