为什么在此代码中得到InputMismatchException?

时间:2020-07-27 18:10:52

标签: java exception

我得到了:
'线程“主”中的异常 java.util。 InputMismatchException ' in:
float AnnualInterest = Scanner.nextFloat();
我试过两次,现在浮起来,得到同样的错误。
我输入了一个带有小数(3.2)的数字,并得到了这个异常。
有人可以告诉我这段代码有什么问题吗?
使用JDK 14。

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);
    }
}

2 个答案:

答案 0 :(得分:0)

在我的Mac上,当涉及“年利率:”并且我用3.2编写时,它崩溃了,但是如果我用3,2编写则它起作用了。

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

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

答案 1 :(得分:0)

该方法的文档中所述

如果下一个标记与 Float 正则表达式不匹配或超出范围,则

@引发InputMismatchException

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

如果要在内部更改Locale,请使用Scanner

相关问题