打印字符串’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仍将在技术上循环。