如果我在输出端输入字母表,java程序就会崩溃,请帮助解决这个问题



如果我输入字母表,下面的程序应该不会崩溃(错误粘贴在底部(;相反,它应该要求用户输入一个有效的数字。

import java.text.NumberFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final byte MONTHS_IN_YEAR = 12;
final byte PERCENT = 100;
int principal = 0;
float monthlyInterest = 0;
int numberOfPayments = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a number between 1,000 and 1,000,000.");
while(true) {
System.out.print("Principal: ");
principal = scanner.nextInt();
if (principal >= 1000 && principal <= 1000_000)
break;
System.out.println("Enter a valid input");
}
while(true) {
System.out.print("Annual Interest Rate: ");
float annualInterest = scanner.nextFloat();
if (annualInterest > 0 && annualInterest <= 15) {
monthlyInterest = annualInterest / PERCENT / MONTHS_IN_YEAR;
break;
}
System.out.println("Enter a value between 1 and 15");
}
while(true) {
System.out.print("Period (Years): ");
byte years = scanner.nextByte();
if (years > 0 && years <= 30) {
numberOfPayments = years * MONTHS_IN_YEAR;
break;
}
System.out.println("Enter a value between 1 and 30");
}
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);

}
}

**输出#1//当用户输入时,周期为abc

Enter a number between 1,000 and 1,000,000.
Principal: 600
Enter a valid input
Principal: 2000
Annual Interest Rate: 0
Enter a value between 1 and 15
Annual Interest Rate: 3.5
Period (Years): abc
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextByte(Scanner.java:2002)
at java.base/java.util.Scanner.nextByte(Scanner.java:1956)
at com.company.Main.main(Main.java:39)
Process finished with exit code 1

输出#2//当年份数据类型为字节,但用户输入300时程序应该要求用户输入一个有效的号码

Enter a number between 1,000 and 1,000,000.
Principal: 1000000
Annual Interest Rate: 3.9
Period (Years): 300
Exception in thread "main" java.util.InputMismatchException: Value out of range. Value:"300" 
Radix:10
at java.base/java.util.Scanner.nextByte(Scanner.java:2008)
at java.base/java.util.Scanner.nextByte(Scanner.java:1956)
at com.company.Main.main(Main.java:39)
Process finished with exit code 1

您应该使用Try-Catch,如下所示:

while(true) {
System.out.print("Period (Years): ");
try{
byte years = scanner.nextByte();
if (years > 0 && years <= 30) {
numberOfPayments = years * MONTHS_IN_YEAR;
break;
}
System.out.println("Enter a value between 1 and 30");
catch (Exception e){
System.out.println("Value must be numeric");
}
}

最新更新