我得到了:
'线程“主”中的异常 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);
}
}
答案 0 :(得分:0)
在我的Mac上,当涉及“年利率:”并且我用3.2编写时,它崩溃了,但是如果我用3,2编写则它起作用了。
这是由于您的系统设置决定了用于写入十进制数字的标点符号。我们在Java中将其称为“语言环境”。一种解决方案是更改系统设置,但这将更改计算机上每个程序的设置。现在,我建议您只使用系统默认接受的格式输入数字。
如果只想在自己的Java程序中使用不同的设置,则需要设置与要使用的规则相对应的语言环境。不要打架将来,当您对Java有更多了解时,就可以开始学习语言环境以及如何在Java代码中进行设置。
答案 1 :(得分:0)
该方法的文档中所述
如果下一个标记与 Float 正则表达式不匹配或超出范围,则@引发InputMismatchException
我猜您的输入(3.2)与您当前语言环境的浮点格式不匹配。使用默认的语言环境(Locale.GERMAN
),我需要输入“ 3,2”。
如果要在内部更改Locale
,请使用Scanner
。