Вылетает NoSuchElementException в NetBeans

150
14 апреля 2022, 23:20

Я не могу понять, почему в NetBeans у меня вылетает исключение NoSuchElementException ещё до ввода данных. До этого программу запускал в VS Code, и там всё работало хорошо.

Класс Main, который вызывает меню:

package Main;
public class Main {
    public static void main(String args[ ]) {
        Menu.run();
    }
}

Класс Menu:

package Main;
import java.util.Scanner;
import java.util.InputMismatchException;
public class Menu {
    private static int menuChoice = -1;
    private static void showMenu() {
        System.out.println("1 - to create and add new object");
        System.out.println("2 - to delete object");
        System.out.println("3 - to find object");
        System.out.println("4 - to print all list");
        System.out.println("5 - to execute abstract method");
        System.out.println("0 - to exit program");
    }
    private static int getMenuChoice() {
        Scanner in = new Scanner(System.in);
        do {
            try {
                menuChoice = in.nextInt();
            }
            catch (InputMismatchException e) {
                System.out.println("You have entered incorrect data");
                in.nextLine();
            }
            if (menuChoice < 0 || menuChoice > 5) 
                System.out.println("The value must be from 0 to 5");
        } while (menuChoice < 0 || menuChoice > 5);
        return menuChoice;
    }
    public static void run() {
        do {
            showMenu();
            menuChoice = getMenuChoice();
            switch (menuChoice) {
                case 1:
                    Group.addElement();
                    break;
                case 2:
                    Group.delObj();
                    break;
                case 3:
                    Group.findObj();
                    break;
                case 4:
                    Group.printAllList();
                    break;
                case 5:
                    Group.executeAM();
                    break;
                case 0:
            }
        } while (menuChoice != 0);
    }
}

В консоли:

JAVA_HOME="C:\Program Files\Java\jdk-14.0.2"
cd C:\Users\ПК\Documents\NetBeansProjects\Main; C:\Users\ПК\.gradle\wrapper\dists\gradle-6.3-bin\8tpu6egwsccjzp10c1jckl0rx\gradle-6.3\bin\gradle --configure-on-demand -x check run
Configuration on demand is an incubating feature.
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :run FAILED
1 - to create and add new object
2 - to delete object
3 - to find object
4 - to print all list
5 - to execute abstract method
0 - to exit program
Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Main.Menu.getMenuChoice(Menu.java:22)
    at Main.Menu.run(Menu.java:37)
    at Main.Main.main(Main.java:5)
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':run'.
> Process 'command 'C:\Program Files\Java\jdk-14.0.2\bin\java.exe'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 447ms
2 actionable tasks: 1 executed, 1 up-to-date
Answer 1

В описании Scanner.html#nextInt написано, что выбрасывается исключение NoSuchElementException, если данных больше нет.

Попробуйте ловить исключение и выходить из цикла:

    private static int getMenuChoice() {
        Scanner in = new Scanner(System.in);
        do {
            try {
                menuChoice = in.nextInt();
            }
            catch (InputMismatchException e) {
                System.out.println("You have entered incorrect data");
                in.nextLine();
            }
            catch (NoSuchElementException e) {
                menuChoice = -1;
                break;
            }
            if (menuChoice < 0 || menuChoice > 5) 
                System.out.println("The value must be from 0 to 5");
        } while (menuChoice < 0 || menuChoice > 5);
        return menuChoice;
    }
READ ALSO
Передача битовой информации по Bluetooth

Передача битовой информации по Bluetooth

я - новичок, так что не судите строгоЯ разрабатываю приложение на Java под Android

149
Работа с Predicate

Работа с Predicate

У меня есть задача, нужно сделать фильтры для стримов с разными типами объектов

255
Не выполняется запрос к API в потоках (Threads)

Не выполняется запрос к API в потоках (Threads)

Пытаюсь сделать тест, имитация работы 2х пользователей над док-мИспользую библиотеки RestAssured и JerseyTest

97