提问人:vishalpd 提问时间:4/22/2023 最后编辑:vishalpd 更新时间:4/22/2023 访问量:48
再次调用时如何在递归方法中打印另一个语句
How to print another statement in a recursive method when called again
问:
该方法要求用户输入 String。如果新团队不存在,则将其添加到 arraylist 中,否则将再次运行该方法。addTeam
我想更改它,以便如果列表中已经存在团队,它将打印“团队已经存在!请输入一个新名称“,然后再次要求用户输入,而无需在方法中打印第一个 print 语句。
编辑:我无法在方法之外创建新字段。此外,它不一定必须采用递归方法。使用循环也可以使它起作用吗?
public void addTeam(){
System.out.print("Please enter the name of the team: ");
String teamName = In.nextLine(); //In.nextLine() prompts user for String input
if (teamExists(teamName) == null){ //teamExists() returns the team object if found else null
teams.add(new Team(teamName));
System.out.println("Team " + teamName + " added! ");
}
else{
System.out.print("Team " + teamName + " already exist! ");
addTeam();
}
teamsPage();
}
示例 I/O
Please enter the name of the team: Knicks
Team Knicks already exist! Please enter a new name: Lakers
Team Lakers already exist! Please enter a new name: Bulls
Team Bulls already exist! Please enter a new name: Warriors
Team Warriors added!
答:
2赞
Visrut
4/22/2023
#1
你必须根据我们的目标保持某种可以有两个价值的东西,我们可以用它来做到这一点。state
show first print statement
don't show first print statement
boolean
因此,在您的情况下,如果我们保持为 a ,我们可以开始使用 和 获得这种行为。isAlreadyExist
boolean
recursion
state management
如下所示
public boolean isAlreadyExist = false;
public void addTeam(){
if(!isAlreadyExist) {
System.out.print("Please enter the name of the team: ");
}
String teamName = In.nextLine();
if (teamExists(teamName) == null){ //teamExists() returns the team object if found else null
teams.add(new Team(teamName));
System.out.println("Team " + teamName + " added! ");
this.isAlreadyExist = false;
}
else{
System.out.print("Team " + teamName + " already exist! ");
this.isAlreadyExist = true;
addTeam();
}
teamsPage();
}
您也可以在函数参数中维护此状态,在这种情况下,您必须在调用函数时传递一个新状态,这将增加每次调用的堆栈中的内存,但如果您将状态维护为类变量本身或全局在其他语言中,它可能会节省内存。
评论
0赞
vishalpd
4/22/2023
还有别的办法吗?我无法在方法外部创建新变量。
0赞
Visrut
4/22/2023
是的,你可以通过传递参数来维护,就像我说的那样,或者基于你是否要打印消息,但你必须给出一个参数。state
addTeam(true)
addTeam(false)
0赞
vishalpd
4/22/2023
对不起,我忘了提,但该方法不必递归。事实证明,使用 while 循环会简单得多。第一次调用时,没有什么可以传递给该方法的,但让我尝试找到解决方法
1赞
vishalpd
4/22/2023
#2
该方法不必是递归的。我按照注释的建议使用 while 循环实现了函数。
public void addTeam (){
System.out.print("Please enter the name of the team: ");
String teamName = In.nextLine();
while (teamExists(teamName) != null){
System.out.print("Team " + teamName + " already exist! Please enter a new name: ");
teamName = In.nextLine();
}
teams.add(new Team(teamName));
System.out.println("Team " + teamName + " added!");
teamsPage();
}
我喜欢 while 循环。
评论
while ( ! teamAddedSuccess)