我创建了以下类来输入用户的年龄,然后在控制台中显示相应的信息。
在运行此程序时,控制台会询问"请输入您的年龄:"
如果用户输入例如:25的整数,则执行的类显示"你的年龄是:25岁和34岁;在控制台中。
如果用户输入非整数,控制台会显示: 年龄应该是整数 请输入您的年龄:
但是当我将光标放在&#34时,我无法通过键盘输入任何内容;请输入您的年龄:"。
我希望用户能够再次进入他的年龄,&如果他输入一个整数,它会显示正确的输出,但如果他输入一个非整数,控制台应再次询问他的年龄。
如果您查看我的代码,我可以设置变量' age'通过调用main函数中else块中的函数checkAge()。
有谁能告诉我哪里出错了?
public class ExceptionHandling{
static Scanner userinput = new Scanner(System.in);
public static void main(String[] args){
int age = checkAge();
if (age != 0){
System.out.println("Your age is : " + age);
}else{
System.out.println("Age should be an integer");
age = checkAge();
}
}
public static int checkAge(){
try{
System.out.print("Please Enter Your Age :");
return userinput.nextInt();
}catch(InputMismatchException e){
return 0;
}
}
}
答案 0 :(得分:2)
如果您希望多次执行代码(直到用户输入有效年龄),您应该将代码放在循环中:
public static void main(String[] args)
{
int age = checkAge();
while (age == 0) {
System.out.println("Age should be an integer");
userinput.nextLine();
age = checkAge();
}
System.out.println("Your age is : " + age);
}
答案 1 :(得分:2)
<强>问题:强>
return userinput.nextInt();
当你输入一个字符串序列时,它不会消耗你的新行字符,当你再次进入你的方法并调用userinput.nextInt()
时,它将消耗该新行并跳过它因此不会让你得到再次输入。
<强>溶液强>
在再次调用nextLine();
方法之前添加checkAge
以使用字符串中的new line
<强>样品:强>
System.out.println("Age should be an integer");
userinput.nextLine();
age = checkAge();