我对Scanner有一个问题,因为它似乎采用输入值类型并强制用户下次输入值为相同类型。我找不到此代码不起作用的任何原因,并给我一个InputMismatchException,因为我已经编写了一百万次这样的代码并且没有问题。
public void register(){
Scanner input=new Scanner(System.in);
System.out.println("What course would you like to register for?");
String course_name = input.next();
System.out.println("What section?");
int section = input.nextInt();
for (int i = 0; i < courses.size(); i++) {
if (courses.get(i).getCourse_name().equals(course_name)) {
if (courses.get(i).getCourse_section() == section) {
courses.get(i).AddStudent(this.first_name+" "+this.last_name);
}
}
}
input.close();
}
这个问题不仅仅是register()方法的问题,而是整个程序的问题,例如下面的代码:
public void Options() {
Scanner input=new Scanner(System.in);
while (true) {
System.out.println("What would you like to do (Enter corresponding number):" + "\n" + "1) View all courses" + "\n" + "2) View all courses that are not full" + "\n" + "3) Register on a course" + "\n" + "4) Withdraw from a course" + "\n" + "5) View all courses that the current student is being registered in" + "\n" + "6) Exit");
int user = input.nextInt();
if (user == 1)
viewAll();
if (user == 2)
viewAllOpen();
if (user == 3)
register();
if (user == 4)
withdraw();
if (user == 5)
viewRegistered();
if (user == 6) {
Serialize();
break;
}
}
如果其中一种方法(如 register)要求用户输入字符串,则 int user=input.nextInt();将导致输入不匹配异常。
我复制了这段代码,我没有同样的问题。如果用户在提示输入课程号时输入整数(如11),代码将正常运行。当然,如果输入的不是整数,它将抛出InputMissMatchException。请参阅扫描仪#nextInt()的Java文档说明,特别是以下内容:
将输入的下一个标记扫描为int。
调用nextInt()形式的此方法的行为与调用nextInt(radix)的行为完全相同,其中radix是此扫描器的默认radix。
抛出:
输入不匹配异常 - 如果下一个标记与 Integer 正则表达式不匹配,或者超出范围
阅读更多
如果您想防止这种情况,并且不想处理try-catch,那么您可以暂停执行,直到给出一个有效的整数。
public static void register(){
Scanner input=new Scanner(System.in);
System.out.println("What course would you like to register for?");
String course_name = input.next();
System.out.println("What section?");
//Loop until the next value is a valid integer.
while(!input.hasNextInt()){
input.next();
System.out.println("Invalid class number! Please enter an Integer.");
}
int section = input.nextInt();
input.close();
System.out.println(course_name + " " + section);
}
(更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?
我正在为一堂课做家庭作业。你必须计算这个月的工资。每次我尝试运行它时,它总是这样说:我如何修复它?线程“main”java.util.InputMismatchException中的异常 java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(扫描仪.java:1485) java.util.Scanner.ne
编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 (更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?
到目前为止,我有这个: 和这个: 当我测试这个时,它不能采取双倍数字,我收到这个消息: 我该如何解决这个问题?
我应该得到的输出 我不确定发生了什么。
我正在做一个场景,我只想接受1或2作为输入,并且在输入另一个数字或输入无效时处理错误。为此,我正在做: 如果我添加在中,由于选项的范围在try内,它会给出一个错误。我希望它继续要求用户输入有效数字,即1或2,但如果我输入任何字符,它将进入并退出。