3

是否可以打印字符串“x”次?

例如,如果给定字符串

String q = "*";

假设用户输入数字“4”表示他们希望字符串重复的次数。

该程序将打印:

****
4

6 回答 6

12

你可以像这样使用递归

private void printStar(int n){
    if(n > 0){
        System.out.print("*");
        printStar(n-1);
    }
}

并最初调用这样的方法 -printStar(4);

于 2013-10-18T17:21:53.203 回答
11

您可以使用char[]给定长度的数组来构建 a String,然后将每个字符替换为*

String repeatedStar = new String(new char[4]).replace('\0', '*');

好吧,那将在内部使用循环。

于 2013-10-18T17:23:07.630 回答
5

Apache commons common-lang中,使用StringUtils.repeat

System.out.println(StringUtils.repeat(q,4));
于 2013-10-18T18:06:56.580 回答
4

虽然它可能在内部循环,但您可以Strings在用户代码中使用 Guava 的避免循环:

System.out.println(Strings.repeat("*", 4));
于 2013-10-18T17:20:25.440 回答
3

在递归中

printStar(int x)
{
   if(x > 0)
   {
     System.out.print("*");
     printStar(x-1);
   }
}
于 2013-10-18T17:21:39.927 回答
1

我知道重点可能是使用递归,但在这种情况下递归是一个可怕的解决方案。这是一个更有效的解决方案(尽管它很可能使用循环Arrays.fill!)

public static void printNX(int n)
{
    char[] c = new char[n];
    Arrays.fill(c, 'x');
    System.out.println(new String(c));
}

当然,有可能Arrays.fill调用本地代码,这些代码经过优化,可以使用有效的指令来填充数组并避免循环。但你永远不知道。

我不一定同意使用递归“不是循环”;所有这一切都是在颠簸堆栈;CPU 在技术上仍将通过不断跳回到递归函数的顶部来循环。

于 2013-10-18T17:26:50.337 回答