当前位置: 首页 > 知识库问答 >
问题:

Java扫描程序错误[重复]

西门洛城
2023-03-14
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)

共有1个答案

夏侯昊明
2023-03-14

这里:

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

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

一个很好的做法是:在命令行上接受来自用户的值时,总是以string的形式接受它们,即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");
            }
       }
 类似资料:
  • 我正试图使用扫描仪从键盘上获取一个int值,但我得到了以下错误: 写入核心转储失败。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited”

  • 我刚开始我的大学java课程,在扫描器类中不断得到这个错误。 我不断得到的错误是:

  • 我正在构建一个Codename一个移动Java应用程序,需要扫描条形码。我在构建服务器上得到构建错误。它曾经工作,但在上个月晚些时候,我不能建立一个扫描仪应用程序。有人遇到过这个挑战吗?我该如何解决?下面是我采取的步骤。谢了!

  • 问题内容: 我有一个创建多个对象并将其放入一个类的类,如下所示: 我有一个从控制台扫描输入“ add”的应用程序,如果找到该应用程序,则调用如下所示的方法: 该应用程序应允许用户根据需要多次输入“添加”,但是在add调用该方法后将出现错误“找不到行” 。 我猜这是因为方法中的尚未关闭,然后在需要时重新打开。这是程序的问题吗?如果是,我将如何修复它? 请注意,该程序尚未完成,因为我将添加一种出售这些

  • 问题内容: 我刚刚了解了Java的Scanner类,现在我想知道它如何与StringTokenizer和String.Split进行比较/竞争。我知道StringTokenizer和String.Split仅适用于字符串,那么为什么要对字符串使用扫描器?扫描仪是否仅打算一站式进行拆分? 问题答案: 他们本质上是课程的马。 设计用于需要解析字符串,提取不同类型数据的情况。它非常灵活,但是可以说它并没

  • 这是我使用的代码: 但当它到达这一点时,它只会说“创建一个名称”。和“创建密码”。两个都在同一时间,然后我必须打一些东西。所以它基本上跳过了需要键入字符串的扫描器部分。在“创建名称”之后。和“创建密码”。然后输入,名称和密码都改为我输入的内容。我怎么解决这个? 这是全班学生。我只是在测试,所以它实际上不是一个程序: 抱歉我语法不好。我不是英国人,所以我很难解释。