gpt4 book ai didi

java - 为什么即使使用 hasNextInt() 方法也会收到 inputMismatchException?

转载 作者:行者123 更新时间:2023-12-02 10:36:01 25 4
gpt4 key购买 nike

该程序要求用户输入学号,学号必须是 0-999999 之间的整数。已被注释掉的 testID 方法使用 do while 循环和内部 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() 将返回 false 并且 !hasNextInput() 将返回 truewhile 将继续循环,直到输入有效的整数

现在,在情况 2 中,while 内的条件始终为 false,

while(!input.hasNextInt()) && (0 > studentID) && (studentID > 999999) {
...
}

看,这里 studentID 默认设置为 -1,因此即使 !input.hasNextInt() 返回 true 正如预期的那样,将此 true(studentID > 999999) 进行and 的结果是 false。因此,代码永远不会进入 while 循环并移至下一行,

studentID = input.nextInt();

这将引发 InputMismatchException,因为输入的值不是整数

关于java - 为什么即使使用 hasNextInt() 方法也会收到 inputMismatchException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53287071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com