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);