为什么即使使用 hasNextInt() 方法我也会收到 inputMismatchException?
Why am I getting inputMismatchException even when using hasNextInt() method?
此程序要求用户输入他们的学号,该号必须是 0-999999 之间的整数。已被注释掉的 testID 方法使用带有内部 while 循环的 do while 循环,以确保用户仅输入整数值。这种方法没有任何问题。
在尝试重写代码(第二个 testID 方法)时,每次我 运行 程序并输入字符串或字符值时,我都会得到一个 inputMismatchException
。第一种方法不会发生这种情况。有人可以解释为什么会这样吗?
import java.util.*;
public class StudentID{
public static int studentID= -1;
public static Scanner input = new Scanner(System.in);
public static void main(String[] args){
testID();
}
/*
public static void testID(){
System.out.println("Enter your Student EMPLID (0-999999):");
do{
while (!input.hasNextInt()){
input.nextLine();
System.out.println("Enter a valid Student EMPLID (0-999999).");
}
studentID = input.nextInt();
if(0 > studentID || studentID > 999999){
input.nextLine();
System.out.println("Enter a valid Student EMPLID (0-999999).");
}
} while (0 > studentID || studentID > 999999);
System.out.println("Student EMPLID: " + studentID);
}
*/
public static void testID(){
System.out.println("Enter your Student EMPLID (0-999999:)");
while ((!input.hasNextInt()) && (0 > studentID) && (studentID > 999999)){
input.nextLine();
System.out.println("Enter a valid Student EMPLID (0-999999:)");
}
studentID = input.nextInt();
System.out.println("Student EMPLID: " + studentID);
}
}
问题出在while
里面的逻辑上。在注释的 testID()
方法中,您检查了以下条件为真:
while(!input.hasNextInt()) {
....
}
因此对于非整数输入,input.hasNextInt()
将 return false
和 !hasNextInput()
将因此 return true
和 while
将继续循环,直到输入有效的 integer
。
现在在情况 2 中,while
中的条件始终为 false,
while(!input.hasNextInt()) && (0 > studentID) && (studentID > 999999) {
...
}
看,这里 studentID
默认设置为 -1
因此即使 !input.hasNextInt()
return 按预期编辑 true
,结果 anding
这个 true
和 (studentID > 999999)
是 false
。所以代码永远不会进入 while
循环并移动到下一行,这恰好是
studentID = input.nextInt();
这将抛出 InputMismatchException
,因为输入的值不是 integer
此程序要求用户输入他们的学号,该号必须是 0-999999 之间的整数。已被注释掉的 testID 方法使用带有内部 while 循环的 do while 循环,以确保用户仅输入整数值。这种方法没有任何问题。
在尝试重写代码(第二个 testID 方法)时,每次我 运行 程序并输入字符串或字符值时,我都会得到一个 inputMismatchException
。第一种方法不会发生这种情况。有人可以解释为什么会这样吗?
import java.util.*;
public class StudentID{
public static int studentID= -1;
public static Scanner input = new Scanner(System.in);
public static void main(String[] args){
testID();
}
/*
public static void testID(){
System.out.println("Enter your Student EMPLID (0-999999):");
do{
while (!input.hasNextInt()){
input.nextLine();
System.out.println("Enter a valid Student EMPLID (0-999999).");
}
studentID = input.nextInt();
if(0 > studentID || studentID > 999999){
input.nextLine();
System.out.println("Enter a valid Student EMPLID (0-999999).");
}
} while (0 > studentID || studentID > 999999);
System.out.println("Student EMPLID: " + studentID);
}
*/
public static void testID(){
System.out.println("Enter your Student EMPLID (0-999999:)");
while ((!input.hasNextInt()) && (0 > studentID) && (studentID > 999999)){
input.nextLine();
System.out.println("Enter a valid Student EMPLID (0-999999:)");
}
studentID = input.nextInt();
System.out.println("Student EMPLID: " + studentID);
}
}
问题出在while
里面的逻辑上。在注释的 testID()
方法中,您检查了以下条件为真:
while(!input.hasNextInt()) {
....
}
因此对于非整数输入,input.hasNextInt()
将 return false
和 !hasNextInput()
将因此 return true
和 while
将继续循环,直到输入有效的 integer
。
现在在情况 2 中,while
中的条件始终为 false,
while(!input.hasNextInt()) && (0 > studentID) && (studentID > 999999) {
...
}
看,这里 studentID
默认设置为 -1
因此即使 !input.hasNextInt()
return 按预期编辑 true
,结果 anding
这个 true
和 (studentID > 999999)
是 false
。所以代码永远不会进入 while
循环并移动到下一行,这恰好是
studentID = input.nextInt();
这将抛出 InputMismatchException
,因为输入的值不是 integer