[英]Why do I get InputMismatchException in this code?
我越來越:
'線程“主” java.util 中的異常。 InputMismatchException '在:
浮動年利率 =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);
}
}
在我的 Mac 上,當談到“年利率:”並且我用 3.2 編寫時,它會崩潰,但如果我用 3,2 編寫它就可以了。
這是由於您的系統設置決定了用於寫入十進制數字的標點符號。 我們在 Java 中將此稱為“語言環境”。 一種解決方案是更改系統設置,但這會更改計算機上每個程序的設置。 現在,我建議您使用系統默認接受的格式輸入數字。
如果您只想在您自己的 Java 程序中使用不同的設置,那么您需要設置與您要使用的規則相對應的語言環境。 不要與之抗爭。 將來當您了解更多有關 Java 的信息時,您可以開始了解語言環境以及如何在 Java 代碼中設置它們。
正如方法的文檔所說
regular expression, or is out of range @throws InputMismatchException 如果下一個標記與正則表達式不匹配,或者超出范圍
我猜您的 Input (3.2) 與您當前語言環境的浮點格式不匹配。 使用我的默認語言環境( Locale.GERMAN
),我需要輸入“3,2”。
如果您想更改Scanner
在內部使用的Locale
,您可以使用Scanner.useLocale
來實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.