打印字符串’X’时间(无循环)

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

例如,如果给出字符串

String q = "*"; 

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

该计划将打印:

 **** 

你可以像这样使用递归

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

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

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

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

那么,那将在内部使用循环。

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

 System.out.println(Strings.repeat("*", 4)); 

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

 System.out.println(StringUtils.repeat(q,4)); 

在递归中

 printStar(int x) { if(x > 0) { System.out.print("*"); printStar(x-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仍将在技术上循环。