当前位置: 首页 > 面试题库 >

扫描程序在nextInt上引发NoSuchElementException

梁烨
2023-03-14
问题内容

html" target="_blank">逻辑工作正常,但是,当while循环结束并重新开始时,使用此行从键盘再次读取我的下一个选项-> option = kb.nextInt();
。它给了我一个例外,更确切地说是下面的一个例外:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at view.ClientFacade.main(ClientFacade.java:18)

下面是我的代码,为什么此扫描程序会生成此错误?还有其他从键盘读取的方法吗?

public class ClientFacade {
    public static Scanner kb = new Scanner(System.in);

    public static void main(String[] args) {
        boolean exit = false;
        int option = 0;
        RegistrationController rc = new RegistrationController();

        while(exit == false){
            System.out.println("Menu:");
            System.out.println("1 - Sign up on service.");

            option = kb.nextInt(); //ERROR ON THIS LINE WHEN IT EXECUTES ON THE SECOND LOOP

            switch(option){

            case 0:{
                exit = true;
                break;
            }
            case 1:{
                rc.userSignUp();
                break;
            }
            default:{
                System.out.println("Invalid option.");
                break;
            }

            }
        }
    }
}

下面的此方法在另一个类文件RegistrationController.java上,因此由上面的rc viariable实例化。

public void userSignUp(){
        User usr = new User();
        RegistrationController rc = new RegistrationController();
        String regex = "$(\\w)+(\\,)(\\w)+(\\,)(\\d){2,3}(\\,)[F,M](\\,)(\\w)+(@)(\\w)+(.)(\\w)+((.)(\\w)+)(,)(\\w)+^";
        Scanner sc = new Scanner(System.in);
        System.out.println("Input a single line separated by COMMA,"
                + " the software will validade your entry.\n"
                + "1 - Your First Name, 2 - Your Second Name,"
                + " 3 - Your Age, 4 - Your Gender \n(F or M in UPPER CASE)"
                + " 5 - Your Email, 6 - Your Password:\n");
        String s = sc.nextLine();
        s = s.trim();
        System.out.println("trimmed"); //DEBUG
        String [] k = s.split(",");
        char[] c = k[3].toCharArray();

        if (Pattern.matches(regex, s)){
            usr.setAdmLevel(0);
            usr.setName(k[0]+" "+k[1]);
            usr.setAge(Integer.parseInt(k[2]));
            usr.setGender(c[0]);
            usr.setEmail(k[4]);
            usr.setPassword(k[5]);
            if (rc.registerUser(usr) != 0){
                System.out.println("Your are signed up! Your ID: "+usr.getId());
            }else {
                System.out.println("A problem ocurred, not registered.");
            }
        }else{
            System.out.println("Wrong input pattern, try again.");
        }
        sc.close();
    }

问题答案:

调用时,sc.close()它关闭您的基础流System.in;即 一旦关闭System.in,取回它的唯一方法就是重新启动程序。

根据close()Javadoc,

如果此扫描器尚未关闭,则其底层可读文件也实现了Closeable接口,则将调用该可读文件的close方法



 类似资料:
  • 问题内容: 我正在用Java从头开始编写RPG战斗系统,雄心勃勃吧?好吧,我遇到了麻烦。这是我的代码: 当它到达代码中的这一点时,我得到: 你会怎么做?说(战斗)(运行)(使用项) 线程“主”中的异常java.util.NoSuchElementException: 在Combat.turnChoice(Combat.java:23)的 java.util.Scanner.nextLine(Unk

  • 下面的代码显示了一个错误。我对编码很陌生。这东西弄乱了我的脑袋。我能做什么? 下面的代码在编辑之后。但它仍然显示出NoSuchElementFound异常的相同错误。

  • 我正试图使用扫描仪从键盘上获取一个int值,但我得到了以下错误: 写入核心转储失败。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited”

  • 这里是Java新手,尝试扫描下面表单中的输入: 3 3 3 101 000 101 拜托,有更有经验的人能教我如何解决这个问题吗?我发现一些问题与。nextline()和。nextint()有类似的问题,但不完全是这样。不过,如果真的是复制品,我提前道歉... (如果需要,我会添加更多信息)

  • 我是Java新手。我必须从2D数组向终端显示int系数。我想在同一行中为同一卖家提供每个值。有一个换行符(由于扫描仪?)。我一直在寻找分隔符system.in但我不明白如何使用它,如果这是合适的。 请帮帮我好吗?先谢谢你 最终结果: 输入卖家数量5 输入型号4的数量 卖家1 0 3. 2个 0

  • 这是我在Jcreator上编写的代码 代码如下:- 什么是错误的,我如何纠正它?请帮助。