Java扫描程序错误

Java扫描程序错误,java,Java,我在运行以下代码时遇到扫描仪错误: 这怎么可能 import java.util.Scanner; public class ComputeLoan { public static void main(String[] args) { // Create a Scanner Scanner input = new Scanner(System.in); //Enter annual interest rate in percentage e.g., 7.25%

我在运行以下代码时遇到扫描仪错误: 这怎么可能

import java.util.Scanner;

public class ComputeLoan {
    public static void main(String[] args) {
    // Create a Scanner
    Scanner input = new Scanner(System.in);

    //Enter annual interest rate in percentage e.g., 7.25%
    System.out.print("Enter annual interest rate in, e.g., 7.25%: ");
    double annualInterestRate = input.nextDouble();

    // Obtain monthly interest rate
    double monthlyInterestRate = annualInterestRate / 1200;

    //Enter number of years
    System.out.print(
      "Enter number of years as an integer, e.g., 5: ");
    int numberOfYears = input.nextInt();

    // Enter loan amount
    double loanAmount = input.nextDouble();

    // Calculate payment
    double monthlyPayment = loanAmount * monthlyInterestRate / (1 - 1 / Math.pow(1 +     
    monthlyInterestRate, numberOfYears * 12));

    double totalPayment = monthlyPayment * numberOfYears * 12;


    // Display results
    System.out.println("The monthly payment is $" + (int) (monthlyPayment * 100) / 100.0);
    System.out.println("The total payment is $" + (int) (totalPayment * 100) / 100.0);

    }
}
控制台:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at ComputeLoan.main(ComputeLoan.java:10)
在这里:

在控制台上输入值时,输入为7.25,而不是7.25%

应遵循的良好实践: 在命令行上接受来自用户的值时,始终以字符串形式接受它们,即input.nextLine,然后使用parse方法将其解析为适当的类型。如果在解析时发生异常,则表示用户未正确输入输入,请通知用户并继续

例如:

while(true) {
      try {
            System.out.print("Enter annual interest rate in, e.g., 7.25%: ");
            double annualInterestRate = Double.parseDouble(input.nextLine());
            break;
          } 
     catch(NumberFormatException nfe) {
                System.out.print("Wrong input,enter again");
            }
       }
原因: 是

由扫描程序引发,以指示检索到的令牌与预期类型的模式不匹配,或者该令牌超出预期类型的范围

出现此异常是因为您正在输入字符串7.25%,并试图使用input.nextInt和input.nextDouble从中检索Double和int

解决方案: 您可以从扫描仪中读取行,然后使用

和 : 从用户读取字符串并分析双值:

    // Enter annual interest rate in percentage e.g., 7.25%
    System.out.print("Enter annual interest rate in, e.g., 7.25%: ");
     //read the line
    String inputStr = input.nextLine();

    //parse the double value after removing the % sign
    double annualInterestRate = Double.parseDouble(inputStr.replace("%", "")); 
同样地:

    // Enter number of years
    System.out.print("Enter number of years as an integer, e.g., 5: ");
     //read the line
    inputStr = input.nextLine();
    //parse the int value from the input String
    int numberOfYears = Integer.parseInt(inputStr);

当我输入以下内容时,我会得到输出:

输入年利率,例如7.25%:7.25

以整数形式输入年数,例如5:7

三,

每月付款为0.04美元

总金额为3.83美元

进程已完成,退出代码为0

我希望您知道退出代码0是什么:

但是,代码的问题是

我必须输入一些随机整数,在我的例子中是“3”,以便进行每月付款和总付款过程

正如有人指出的,你不需要输入7.25%。简单地说,input.nextDouble占位符并不希望保存这种数据。输入任何“双精度”数字,它就会工作


谢谢你

当它询问利率时,你提供了什么输入?你在控制台上输入了什么?很好的答案如果每个人都花了这么多时间来正确格式化他们的答案,那么这个网站将是难以置信的!
    // Enter number of years
    System.out.print("Enter number of years as an integer, e.g., 5: ");
     //read the line
    inputStr = input.nextLine();
    //parse the int value from the input String
    int numberOfYears = Integer.parseInt(inputStr);