Я продолжаю получать исключение NoSuchElement в своем коде Java. Что не так с моим кодом?

1

Моя программа Java 1.7 выполняет различные математические функции. Я разделил функции на методы, и они работают нормально сами по себе. Я также сделал быстрый метод, который спрашивает пользователей, хотят ли они продолжить. Тем не менее, я продолжаю получать исключение NoSuchElement после ввода числа. "Повторите попытку? (N/y)", но он не дожидается ввода пользователя и ошибок автоматически. Eclipse Luna выделяет эту строку:

String response = scanner.next();

Здесь основной метод:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (true) {
        System.out.print("Please input a number: ");
        int x = scanner.nextInt();
        System.out.println(chooseOperation(x));
        do_Continue();
        if (do_Continue() == false) {
            break;
        }
    }
    scanner.close();
}

Здесь метод выбора операции:

public static int chooseOperation(int n) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Factorial, Fibonacci, or Pisano? ");
    String response = scanner.next();
    scanner.close();
    if (response.equalsIgnoreCase("factorial")) {
        return factorial(n);
    } else if (response.equalsIgnoreCase("fibonacci")) {
        return fibonacci(n);
    } else if (response.equalsIgnoreCase("pisano")) {
        return pisano(n);
    } else {
        System.out.print("Invalid response. ");
        chooseOperation(n);
        return n;
    }
}

И вот подсказка:

public static boolean do_Continue() {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Try again? (n/y): ");
    String response = scanner.next();
    scanner.close();
    if (response.equalsIgnoreCase("n")) {
        return false;
    } else if (response.equalsIgnoreCase("y")){
        return true;
    } else {
        System.out.print("Invalid response. ");
        do_Continue();
    }
    return false;
}

Если это помогает, вот методы для математических функций:

public static int factorial(int n) {
    if (n==1 || n==0) {
        return 1;
    } else {
        return n*factorial(n-1);
    }
}

public static int fibonacci(int n) {
    if (n==1 || n==0) {
        return n;
    } else {
        return fibonacci(n-1) + fibonacci(n-2);
    }
}

public static int pisano(int n) {
    if (n==1 || n==0) {
        return n;
    } else {
        return (fibonacci(n-1) + fibonacci(n-2)) % 7;
    }
}

Как вы можете видеть, кроме основного метода, все мои методы являются рекурсивными. Благодарю! :)

  • 3
    Весь этот код актуален? Зачем отправлять, если это не так? Вы сделали необходимую отладку, чтобы найти, где есть ошибка? На какую строку указывает трассировка вашего стека исключений?
  • 0
    Я не знаю, какой код может быть полезен для вас. Если вы посмотрите сверху, я сказал, что Eclipse Luna выделяет «String response = scanner.next ()»
Показать ещё 1 комментарий
Теги:
recursion
fibonacci
nosuchelementexception

1 ответ

2
Лучший ответ

Не звони

scanner.close();

Когда вы это сделаете, вы close() System.in ! Затем, когда вы пытаетесь построить свой new Scanner(System.in); он не работает (потому что System.in закрыт).

  • 0
    Я попробую этот код.
  • 0
    @ JeanoErmitaño Убедитесь, что вы удалите все эти звонки. Я вижу несколько Вы можете открыть несколько Сканеров на System.in (или просто передать один и тот же Сканер вашим методам).
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню