Моя программа рекурсивна, и есть ли способ это исправить? ⇐ JAVA
-
Anonymous
Моя программа рекурсивна, и есть ли способ это исправить?
Моя проблема в том, что всякий раз, когда я пытаюсь перехватить исключение в «scannerGettingStarted», я всегда получаю исключение try catch от runProgram. Я знаю, что происходит рекурсия, но до сих пор не могу понять, что это такое. Извините за исходный код, это отстой.
private void ScannerRecordBook(Сканер-сканер){ Система.out.println(); System.out.println("[Успешный метод]"); System.out.println("Школа: " + имя школы); System.out.println("Уровень оценки: " +gradeLevel); System.out.println("Раздел: " + раздел); } частный недействительный сканерGettingStarted (сканер сканера) { System.out.println("\n[ Начало работы ]\n"); в то время как (цикл2) { попробуй(сканер){ System.out.print("Название школы: "); имя школы = Scanner.next(); System.out.print("Уровень оценки: "); GradeLevel = Scanner.nextInt(); System.out.print("Раздел: "); раздел = сканер.следующий(); if(schoolname == null || раздел == null){ System.out.println(""" +-------------------------+ Поле не может быть пустым +-------------------------+"""); } иначе, если (gradeLevel == 0) { System.out.println(""" +-------------------------+ Не может быть нулем +-------------------------+"""); }еще{ цикл2 = ложь; ScannerRecordBook(сканер); } }catch(Исключение е){ Система.out.println(); System.out.println(""" +--------------------------------+ Произошла ошибка! Несоответствие входных данных +--------------------------------+"""); Система.out.println(); сканер.nextLine(); } } } частная пустота runProgram () { ввод = новый сканер(System.in); System.out.println(""" [ Журнал успеваемости учащихся ] "Выпуск ХС" [1] Старт [2] Выход """); пока (цикл) { пытаться{ System.out.print("Номер: "); выборПользователя = input.nextInt(); переключатель (choiceOfUser) { Дело 1 : цикл = ложь; сканерGettingStarted(вход); перерыв; случай 2: System.out.println("+---------------------------+"); System.out.println("-- Выход из программы успешен --"); System.out.println("+---------------------------+"); ввод.закрыть(); цикл = ложь; перерыв; } }catch(ошибка исключения){ System.out.println(""" +--------------------------------+ Произошла ошибка! Ввод не в выборе. +--------------------------------+"""); input.nextLine(); } } ввод.закрыть(); } общественный Главный () { запуститьПрограмму(); } public static void main(String[] args) { новый Главный(); } Текущий результат с ошибкой
[ Журнал успеваемости учащихся ] "Выпуск ХС" [1] Старт [2] Выход Номер: эээ +--------------------------------+ Произошла ошибка! Ввод не в выборе. +--------------------------------+ Номер 1 [ Начиная ] Название школы: е Уровень оценки: rtedd +--------------------------------+ Произошла ошибка! Несоответствие входных данных +--------------------------------+ +--------------------------------+ Произошла ошибка! Ввод не в выборе. +--------------------------------+ Исключение в потоке «основной» java.lang.IllegalStateException: сканер закрыт в java.base/java.util.Scanner.ensureOpen(Scanner.java:1158) в java.base/java.util.Scanner.findWithinHorizon (Scanner.java:1790) в java.base/java.util.Scanner.nextLine(Scanner.java:1658) на пластине5.Main.runProgram(Main.java:177) на Plate5.Main.(Main.java:184) на пластине5.Main.main(Main.java:188) Ожидаемый результат:
[ Журнал успеваемости учащихся ] "Выпуск ХС" [1] Старт [2] Выход Номер: эээ +--------------------------------+ Произошла ошибка! Ввод не в выборе. +--------------------------------+ Номер 1 [ Начиная ] Название школы: е Уровень оценки: rtedd +--------------------------------+ Произошла ошибка! Несоответствие входных данных +--------------------------------+ //Перезапускаем обратно к части сканера «Название школы» Название школы:
Моя проблема в том, что всякий раз, когда я пытаюсь перехватить исключение в «scannerGettingStarted», я всегда получаю исключение try catch от runProgram. Я знаю, что происходит рекурсия, но до сих пор не могу понять, что это такое. Извините за исходный код, это отстой.
private void ScannerRecordBook(Сканер-сканер){ Система.out.println(); System.out.println("[Успешный метод]"); System.out.println("Школа: " + имя школы); System.out.println("Уровень оценки: " +gradeLevel); System.out.println("Раздел: " + раздел); } частный недействительный сканерGettingStarted (сканер сканера) { System.out.println("\n[ Начало работы ]\n"); в то время как (цикл2) { попробуй(сканер){ System.out.print("Название школы: "); имя школы = Scanner.next(); System.out.print("Уровень оценки: "); GradeLevel = Scanner.nextInt(); System.out.print("Раздел: "); раздел = сканер.следующий(); if(schoolname == null || раздел == null){ System.out.println(""" +-------------------------+ Поле не может быть пустым +-------------------------+"""); } иначе, если (gradeLevel == 0) { System.out.println(""" +-------------------------+ Не может быть нулем +-------------------------+"""); }еще{ цикл2 = ложь; ScannerRecordBook(сканер); } }catch(Исключение е){ Система.out.println(); System.out.println(""" +--------------------------------+ Произошла ошибка! Несоответствие входных данных +--------------------------------+"""); Система.out.println(); сканер.nextLine(); } } } частная пустота runProgram () { ввод = новый сканер(System.in); System.out.println(""" [ Журнал успеваемости учащихся ] "Выпуск ХС" [1] Старт [2] Выход """); пока (цикл) { пытаться{ System.out.print("Номер: "); выборПользователя = input.nextInt(); переключатель (choiceOfUser) { Дело 1 : цикл = ложь; сканерGettingStarted(вход); перерыв; случай 2: System.out.println("+---------------------------+"); System.out.println("-- Выход из программы успешен --"); System.out.println("+---------------------------+"); ввод.закрыть(); цикл = ложь; перерыв; } }catch(ошибка исключения){ System.out.println(""" +--------------------------------+ Произошла ошибка! Ввод не в выборе. +--------------------------------+"""); input.nextLine(); } } ввод.закрыть(); } общественный Главный () { запуститьПрограмму(); } public static void main(String[] args) { новый Главный(); } Текущий результат с ошибкой
[ Журнал успеваемости учащихся ] "Выпуск ХС" [1] Старт [2] Выход Номер: эээ +--------------------------------+ Произошла ошибка! Ввод не в выборе. +--------------------------------+ Номер 1 [ Начиная ] Название школы: е Уровень оценки: rtedd +--------------------------------+ Произошла ошибка! Несоответствие входных данных +--------------------------------+ +--------------------------------+ Произошла ошибка! Ввод не в выборе. +--------------------------------+ Исключение в потоке «основной» java.lang.IllegalStateException: сканер закрыт в java.base/java.util.Scanner.ensureOpen(Scanner.java:1158) в java.base/java.util.Scanner.findWithinHorizon (Scanner.java:1790) в java.base/java.util.Scanner.nextLine(Scanner.java:1658) на пластине5.Main.runProgram(Main.java:177) на Plate5.Main.(Main.java:184) на пластине5.Main.main(Main.java:188) Ожидаемый результат:
[ Журнал успеваемости учащихся ] "Выпуск ХС" [1] Старт [2] Выход Номер: эээ +--------------------------------+ Произошла ошибка! Ввод не в выборе. +--------------------------------+ Номер 1 [ Начиная ] Название школы: е Уровень оценки: rtedd +--------------------------------+ Произошла ошибка! Несоответствие входных данных +--------------------------------+ //Перезапускаем обратно к части сканера «Название школы» Название школы:
Мобильная версия