当前位置: 首页 > 知识库问答 >
问题:

找不到输入不匹配异常的原因

麹培
2023-03-14

我对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();将导致输入不匹配异常

共有1个答案

桂玉石
2023-03-14

我复制了这段代码,我没有同样的问题。如果用户在提示输入课程号时输入整数(如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,但如果我输入任何字符,它将进入并退出。