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。