Изучая Java с помощью онлайн-курсов, я экспериментирую с кодом, написанным с помощью учебника.Существует метод, который должен объединять «курсы» и, в конце концов, просто распечатывать их.Я хотел использовать рекурсию вместо цикла.
private String courses = "";
private int tuitionBalance = 0;
public void enroll() {
System.out.println("Enter course to enroll or \"Q\" to quit.");
Scanner in = new Scanner(System.in);
String course = in.nextLine();
if (!course.equalsIgnoreCase("q")) {
courses = courses + "\n" + course;
tuitionBalance = tuitionBalance + costOfCourse;
enroll();
}
System.out.println("Enrolled in: " + courses);
System.out.println("Tuition balance: " + tuitionBalance);
return; // even with "return", this method executes multiple times after leaving if statement.
}
Когда этот метод выполняется, он продолжает запрашивать ввод до тех пор, пока не будет нажата кнопка «Q».Конкатенация работает нормально.Затем он оставляет «оператор if» и (что странно для меня) выполняет последние две строки кода println столько раз, сколько было предоставлено для ввода.
Например, когда я ввожу три типа «курса»и затем нажмите «Q», вывод:
Enter course to enroll or "Q" to quit.
History // My entry
Enter course to enroll or "Q" to quit.
Math // My entry
Enter course to enroll or "Q" to quit.
Biology // My entry
Enter course to enroll or "Q" to quit.
q // My entry
Enrolled in:
History
Math
Biology
Tuition balance: 1800
Enrolled in:
History
Math
Biology
Tuition balance: 1800
Enrolled in:
History
Math
Biology
Tuition balance: 1800
Enrolled in:
History
Math
Biology
Tuition balance: 1800
Process finished with exit code 0
Не могли бы вы рассказать мне, что происходит?
РЕДАКТИРОВАТЬ: Я прочитал Понимание рекурсии [закрыто] и я не нашел никакой информации о том, как рекурсия влияет на стек вызовов.Существует много отличной информации о том, как использовать рекурсию, но я до сих пор не нашел там ответа на свой вопрос.