首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在if语句中使用递归时,在方法中使用递归时的奇怪行为。Java

在if语句中使用递归时,在方法中使用递归时的奇怪行为。Java
EN

Stack Overflow用户
提问于 2018-08-26 01:29:17
回答 1查看 64关注 0票数 0

在通过在线课程学习Java的同时,我还尝试了一些使用本教程编写的代码。有一种方法,它应该连接“课程”,并在最后打印出来。我想使用递归而不是循环。

代码语言:javascript
复制
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 statement“和(对我来说很奇怪的是),它运行最后两行println代码的次数与提供的输入一样多。

例如,当我输入三种类型的"course“,然后按'Q',输出是:

代码语言:javascript
复制
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

你能告诉我发生了什么事吗?

编辑:我已经阅读了Understanding recursion [closed],但我没有找到任何关于递归如何影响调用堆栈的信息。有很多关于如何使用递归的很好的信息,但我仍然没有找到我的问题的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-26 01:50:50

问题是,您不希望在用户已经进入课程的情况下打印递归,否则一个简单的方法就可以解决问题

代码语言:javascript
复制
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(); 
    }
    else{//now it would come here only once after user has entered q after which it returns
    System.out.println("Enrolled in: " + courses);
    System.out.println("Tuition balance: " + tuitionBalance);
     }
    return;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52019653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档