Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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 为什么我会在这段代码中得到InputMismatchException?_Java_Exception - Fatal编程技术网

Java 为什么我会在这段代码中得到InputMismatchException?

Java 为什么我会在这段代码中得到InputMismatchException?,java,exception,Java,Exception,我得到: '线程“main”java.util中的异常。输入不匹配异常'在: float annualInterest=scanner.nextFloat() 我尝试了双精度浮点运算,得到了相同的错误。 我输入了一个带小数点的数字(3.2),得到了这个异常。 有人能告诉我这段代码有什么问题吗? 使用JDK14 public class Main { public static void main(String[] args) { final byte MONTHS_IN_YEAR =

我得到:
'线程“main”java.util中的异常。输入不匹配异常'在:
float annualInterest=scanner.nextFloat()
我尝试了双精度浮点运算,得到了相同的错误。
我输入了一个带小数点的数字(3.2),得到了这个异常。
有人能告诉我这段代码有什么问题吗?
使用JDK14

public class Main {

public static void main(String[] args) {
    final byte MONTHS_IN_YEAR = 12;
    final byte PERCENT = 100;

    Scanner scanner = new Scanner(System.in);

    System.out.print("Principal: ");
    int principal = scanner.nextInt();

    System.out.print("Annual Interest Rate: ");
    float annualInterest = scanner.nextFloat();
    float monthlyInterest = annualInterest / PERCENT / MONTHS_IN_YEAR;

    System.out.print("Period (Years): ");
    byte years = scanner.nextByte();
    int numberOfPayments = years * MONTHS_IN_YEAR;

    double mortgage = principal
                * (monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments))
                / (Math.pow(1 + monthlyInterest, numberOfPayments) - 1);

    String mortgageFormatted = NumberFormat.getCurrencyInstance().format(mortgage);
    System.out.println("Mortgage: " + mortgageFormatted);
    }
}
在我的Mac电脑上,当提到“年利率”时,我写在3.2中,它崩溃了,但如果我写在3.2中,它就工作了

这是由于您的系统设置决定了用于写入十进制数的标点符号。在Java中,我们称之为“语言环境”。一种解决方案是更改系统设置,但这将更改计算机上每个程序的设置。现在,我建议您使用系统默认接受的格式输入数字


如果只想在自己的Java程序中使用不同的设置,则需要设置与要使用的规则相对应的区域设置。不要反抗。将来,当您对Java有了更多的了解后,您可以开始学习语言环境以及如何在Java代码中设置语言环境。

正如该方法的文档所述

@如果下一个标记与浮点正则表达式不匹配或超出范围,则引发InputMissMatchException

我猜您的输入(3.2)与当前区域设置的浮点格式不匹配。使用默认语言环境(
locale.derman
),我需要键入“3,2”


如果要更改
区域设置
您的
扫描仪
在内部使用的内容,可以使用
扫描仪。使用区域设置

请显示程序的运行示例。您键入了什么输入导致异常?我相信我发现了问题。在我的Mac电脑上,当涉及到“年利率”时,我用3.2写,它崩溃了,但如果我用3.2写,它就会起作用。这不是Mac对win/lin的问题,而是文化设置的问题,逗号设置为十进制separator@DMT82请你的问题包括这个细节。谢谢:Iłya Bursov。