我怎么能重复它?

时间:2013-11-07 02:31:50

标签: java

所以我的任务是写一个名为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次。

有人可以帮我理解这段代码吗?

5 个答案:

答案 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;
}

Example

此时,请注意我们无论如何返回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)

  1. 减少y
  2. null不是空字符串。尝试用''。
  3. 替换它

答案 4 :(得分:0)

您需要更改代码

System.out.print(repl(word,y));

System.out.print(repl(word, - y));

在您的代码中,值y不会更改。所以方法repl将处于无限递归状态。