Исключение NoSuchElement после вызова метода - PullRequest
0 голосов
/ 03 ноября 2018

Для класса мне нужно создать программу, в которой есть меню, из которого пользователи могут выбирать, откуда в зависимости от их выбора запускаются определенные методы. Проблема, с которой я сталкиваюсь, заключается в том, что после вызова моих методов программа выдает исключение NoSuchElement в строке 30 (26, когда у меня вставлен код ниже, это строка, где говорится, что selection = console.nextInt ()), когда это должно быть разрешено пользователь снова выбирает опцию в меню. Есть идеи, почему это происходит?

import java.util.*;
public class PartB {

public static void main(String[] args) {
    Scanner console = new Scanner(System.in);
    String pinNum;
    int selection = 0;
    boolean pin;

    System.out.print("Enter pin: ");

    pinNum = console.next();

    pin = check_pin(pinNum);

    if (pin == false) {
        System.out.print("Thank you for using the menu system. Goodbye");
    }


        while (selection != 4 && pin==true) {

        System.out.printf("%nPlease select a number from the menu below %n1: Wage "
            + "Calculator 2: Tip Calculator 3: Grocery Discount 4: Exit %n");

        selection = console.nextInt();

        if (selection == 1) {
            calc_wages();
        } else if (selection == 2) {
            calc_tip();
        } else if (selection == 3) {
            System.out.print("We haven't gotten this far yet");
        } else if (selection == 4){
            System.out.print("Thank you for using the program.");
            break;
        } else {
            System.out.print("There is no option for what you entered. Try again");
        }
            selection = 0;
        }

    console.close();
}//main

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

@ StefanR был прав в том, что причиной закрытия был мой сканер. Перемещение сканера в поле класса приводило к ошибке, но просто удаление console.close () из моих методов устранило проблему.

0 голосов
/ 03 ноября 2018
if(console.hasNextInt()){
  selection = console.nextInt();
}

hasNextInt () будет проверять наличие целого числа для чтения из потока, прежде чем читать его с помощью nextInt (). Если нет, вы можете получить NoSuchElementException, если поток уже исчерпан.

...