簡體   English   中英

為什么我在這段代碼中得到 InputMismatchException?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM