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

Java多开关语句-NoSuchElementException

邓令雪
2023-03-14

目前,我正在使用switch语句。当我有多个带有switch语句的循环时,我会遇到一个问题。

当我退出第二个switch语句(往上说)时,Java抛出Java.util.NoSuchelementException,我不太清楚为什么

switchOne = sc.nextInt(); 

应该触发新的用户输入?

我希望有人能帮我弄清楚这一点。我还尝试使用扫描器,而不使用try-with-resources,但它也出现了同样的错误。

public static void main(String[] args) {

    int switchOne = 0;
    int switchTwo = 0;

    boolean breakAdmin = false;

    try(Scanner sc = new Scanner(System.in)) {

        while(true) {
            System.out.println("Select one of the options below");
            System.out.println("1: Browse books");
            System.out.println("2: Get a coffe");
            System.out.println("3: See previously checkouts");
            System.out.println("0: Exit");
            System.out.print("Option: ");

            switchOne = sc.nextInt();

            switch(switchOne) {
                case 0:
                    return;
                case 1:
                    System.out.println("!!You choose to browse over books, woohoo!!");
                    break;
                case 2:
                    System.out.println("!!Sit & relax");
                    break;
                case 3:
                    System.out.println("!!Let me get that list for you");
                    break;
                case 99:
                    System.out.println("We welcome you!");

                    try(Scanner sc2 = new Scanner(System.in)) {
                        while(!breakAdmin) {
                            System.out.println("0: exit");
                            System.out.println("1: something");

                            switchTwo = sc2.nextInt();

                            switch(switchTwo) {
                            case 0:
                                breakAdmin = true;
                                break;
                            case 1:
                                System.out.println("!!admin 1");
                                break;
                            default:
                                System.out.println("!!This is the default case");
                                break;
                            }
                        }
                    }
                    breakAdmin = false;
                    break;// case 99 ends
                default:
                    System.out.println("!!This is the default case");
                    break;
            } // switch block ends
        } // while loop ends
    } // try with resources ends
}

共有1个答案

党权
2023-03-14

尝试(扫描程序sc2=新扫描程序(System.in)){

try-with-resources构造关闭在try on exit中创建的资源,因此它调用sc2.close(),然后关闭system.in

在此之后,您尝试从另一个sc中读取,后者尝试从system.in中读取。但自从它关闭后,它就不再有任何可读的东西了。

只需删除第二个try即可修复,无需关闭在那里创建的扫描器。

Edit:另一个潜在的问题是,输入流包含一个非数字(例如换行符),它不会被清除,因为它不能将其解释为一个数字,它将抛出声明的异常。在处理用户输入时,最好只阅读整行scanner.readline()并自己转换输入,例如使用integer.parseint(...)

 类似资料:
  • 在短 我想在thymeleaf中有一个switch语句,逻辑一旦写入多个case语句。 详细地 我想在thymeleaf中实现这一点 我当前的胸腺叶代码失败并出现运行时错误 但是上面的代码错误地失败了 注意:我知道出现上述错误消息的原因。我所需要的只是知道一种方法来实现单输出的多情况切换

  • 问题内容: 因此,我今天编写了一种方法,该方法结合了嵌套开关语句的使用,并且代码对我来说看起来很简洁明了,但是有人告诉我,嵌套开关语句通常不是最好的处理方法,因为它们可能会使更多的语句变得混乱。切换添加的语句。这是我的代码的示例: 因此,我的问题是,从本质上讲,什么是这些switch语句的合适替代方案? 问题答案: 我建议您用对过程的调用替换每个嵌套的switch语句,然后该过程将执行嵌套的swi

  • 问题内容: 有人可以解释一下为什么我的循环从0变为7吗?我只需要获得前3种情况,但是程序将遍历所有代码。代码位于show()方法中。 问题答案: 因为没有休息。在每种情况下,您都需要break关键字。有关详细说明,请参见switch语句Java教程。 例如 否则,如果上述情况之一被评估为true,则将执行其他情况。

  • 我有一个对我来说很奇怪的问题。我实现了,将使用执行。问题是,它只执行一次。。。 下面是有用的代码(是一个枚举): 有趣的是,如果我用一些if-else语句替换这个开关,它工作得很好,这意味着这个Runnable按照我的要求每50毫秒执行一次。。! 下面是调度设置: 为什么用if-else语句每50ms调用一次Runnable,为什么用switch只调用一次?? 编辑:因为你问,这里是MenuEve

  • 我们的老师让我们创建一个关于给定情况的java程序,即使用if/else的每小时工资率,这就是我得出的结果,我对此感到高兴(我只是一个初学者)。接下来的指令是用switch语句替换if/else。他还没有讨论switch语句。我试图搜索它们,但我无法理解。请帮忙。非常感谢。 这就是确切的指示:1。使用if/else构造编写一个程序,该程序将根据工作小时数计算人员工资。注意ff:工资率为每小时35菲

  • null 代码如下所示: 和我想提高的班级: 我该怎么办?每个字段都在使用,但每个触发器都在使用。另外,这种情况有点特殊(OnFinalMethod需要参数)。基于上面的文章,我尝试重构这段代码,但没有成功。 你知道吗?:)