【发布时间】:2022-12-07 00:03:30
【问题描述】:
该程序非常简单。你输入你的出生年份,它会打印出你的年龄。但是,当用户输入字符而不是数值时,我试图处理异常。但随后程序开始永远循环。
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Current year is 2022, enter your date of birth: ");
boolean isValid = false;
int age=0;
int dateOfBirth;
do {
try {
dateOfBirth = scanner.nextInt();
scanner.nextLine();
age = 2022 - dateOfBirth;
isValid = age < 0 ? false : age > 125 ? false : true;
}
catch (InputMismatchException e) {
System.out.println("Error");
}
if(!isValid) {
System.out.println("Date of birth is not valid please try again");
}
} while (!isValid);
System.out.println("You are "+age+" years old");
}
}
【问题讨论】:
-
这是练习一些基本调试的好机会。您可以学习使用调试器,但您也可以只添加 printlns 以查看您的
try块到底有多远,以及它分配给dateOfBirth、age和isValid的值。这将准确地向您展示哪些逻辑未按您预期的方式运行。 -
我无权访问 JVM 或编译器,因此我无法对此进行测试,但它可能是 dateOfBirth = scanner.nextInt() 行。它在 age = 2022 - dateOfBirth 时被调用,然后在 isValid = age < 0 时被调用?错误:年龄 > 125?错误:正确。