问题描述
为什么我需要输入2次?请帮助我是Java新手,找不到错误
do {
System.out.println("Enter your age: ");
age= in.nextInt();
if(!in.hasNextInt()) {
System.out.println("Please enter a valid age");
in.nextInt();
valid=false;
}
}while(valid);
我删除了do一会儿,但它仍然要求第二次输入
System.out.println("Enter your age: ");
age= in.nextInt();
if(!in.hasNextInt()) { //Will run till an integer input is found
System.out.println("Please enter a valid age");
in.nextInt();
valid=false;
}
解决方法
我已经更新了您的代码。这将为您工作。
public class Example
{
public static void main(String[] args) {
boolean valid = true;
do {
Scanner in = new Scanner(System.in);
System.out.println("Enter your age: ");
while(!in.hasNextInt()) {
System.out.println("Please enter a valid age");
in.next();
valid = false;
}
int age = in.nextInt();
} while(valid);
}
}
输出:
Enter your age:
2
Enter your age:
seven
Please enter a valid age
seven
Please enter a valid age
3
说明::如果要提供有效的数据,则循环将继续接受输入(不会两次接受输入)。一旦您提供了无效数据,那么代码将提示您输入有效数据,并且循环将在您执行valid = false
时停止执行。
之所以要求您两次输入,是因为您in.hasNextInt()
将检查扫描仪是否有来自系统的输入。由于由于调用age = in.nextInt();
而导致系统没有任何输入,因此会将扫描器移至in.hasNextInt()
之前的下一个单词,因此功能in.hasNextInt()
将要求您输入一些内容,以便可以验证它是否为Int。
我们要做的是先检查当前扫描仪的输入是否有整数,然后再将其存储在age内或再次循环并请求新的输入。
一种更好的检查方法是执行以下操作。
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int age = 0;
System.out.println("Enter your age: ");
while(!in.hasNextInt()){// checks if scanner's next input is an int,return true if next input is not an Int and the while loop continues till the next input is an Int
System.out.println("Please enter a valid age: ");
in.nextLine();//move the scanner to receive the next nextLine
//this is important so the hasNextInt() wont keep checking the same thing
}
//it will only exit the while loop when user have successfully enter an interger for the first word they inputted.
age = in.nextInt();
System.out.println("Your age is: " + age);
}
}
输出:
Enter your age:
boy
Please enter a valid age:
boy girl
Please enter a valid age:
5
Your age is: 5
,
您应将System.out.println("Enter your age: ");
语句移至do-while循环之外。
嗨:D是因为!in.hasNextInt()的原因,它将导致您需要再次输入,但是您可以将其更改为其他条件,例如年龄大于特定值。
public class stackTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int age =0 ;
boolean valid = false;
do {
System.out.println("Enter your age: ");
age= in.nextInt();
if(age>90) {
System.out.println("Please enter a valid age");
valid=true;
}
else valid=false;
}while(valid);
System.out.println("Age: " + age);
}
}