所以我的任务是写一个名为repl的方法,它接受一个String和一些重复作为参数,并返回连接多次的String。例如,应该返回调用repl(“hello”,3) “你好你好你好”。如果重复次数为零或更少,则该方法应返回空字符串。
所以这是我写的代码之一。
import java.util.Scanner;
public class Hello {
public static void main (String [] args){
Scanner console = new Scanner (System.in);
System.out.println("Enter the word");
String word = console.next();
System.out.println("Enter the number");
int y = console.nextInt();
repl(word, y);
}
public static String repl(String word, int y) {
if (y <= 0) {
return null;
}else {
System.out.print(repl(word, y)); //line 21, error is here
}
return word;
}
}
目前这段代码正在编译,但是当我运行它时,它会打印出来
at Hello.repl(Hello.java:21)
一遍又一遍。
我还写了一个代码,只打印出一次单词。我一直在研究这个问题大约一个小时,我仍然很困惑,我怎么能把这个词重复y次。
有人可以帮我理解这段代码吗?
答案 0 :(得分:1)
您需要传递y
的递减值:
public static String repl(String word, int y) {
if (y <= 0) {
return null;
} else {
System.out.print(repl(word, y - 1));
}
return word;
}
这样,递归调用的每次迭代都会将计数降低1,当它达到0时结束。
注意,当word
到达y
时,您可能希望返回0
,因为它需要最后一次打印:
public static String repl(String word, int y) {
if (y <= 0) {
return word;
} else {
System.out.print(repl(word, y - 1));
}
return word;
}
此时,请注意我们无论如何返回word
,这使得第一个if
条件变得不必要。您的整个功能可以简化为:
public static String repl(String word, int y) {
if (y > 0) System.out.print(repl(word, y - 1));
return word;
}
当然,使用for
循环可能要容易得多,但我假设递归是你的任务的一部分。
答案 1 :(得分:0)
y
未在repl(String word, int y)
答案 2 :(得分:0)
基本上这就是你要做的事情:
string toPrint = "";
for (int i=0; i<y; i++)
{
toPrint += word;
}
System.out.println(toPrint)
这个for循环将“word”变量添加到空字符串所需的次数,然后你只需打印该变量。
除非你当然需要使用递归......
答案 3 :(得分:0)
答案 4 :(得分:0)
您需要更改代码
System.out.print(repl(word,y));
到
System.out.print(repl(word, - y));
在您的代码中,值y不会更改。所以方法repl将处于无限递归状态。