2013-10-18 216 views
2

是否可以打印字符串'x'次?打印字符串'X'次(無循環)

例如,如果給定的字符串

String q = "*"; 

比方說,用戶輸入的的,他們希望重複串倍量的數字「4」。

程序將打印:

**** 
+8

您可以使用遞歸。 – SudoRahul

回答

8

你可以像這樣使用遞歸

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

並調用最初像這樣的方法 - printStar(4);

+1

println每隔一行打印一次! – Kevin

+0

我寧願一個循環,而不是遞歸調用。如果''n''很大,你可能會得到''StackOverflowException''(或者它是''Error''?) – Toochka

+0

@Toochka - OP的要求是「不」在代碼中使用任何顯式循環。 – SudoRahul

4

儘管它可能在內部循環,你可以在用戶代碼中使用番石榴的Strings避免循環:

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

在後臺,它也使用for-loop,我猜。 – Juvanis

+1

我不懷疑它,但有用避免在用戶代碼循環;) – Reimeus

+0

基本上,我們應該總是避免編寫樣板文件。 :) – Arijit

3

在遞歸

printStar(int x) 
{ 
    if(x > 0) 
    { 
    System.out.print("*"); 
    printStar(x-1); 
    } 
} 
10

您可以使用一個char[]數組給定長度的構建String,然後替換*每個字符:

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

好,雖然會在內部使用循環。

+1

http://stackoverflow.com/questions/1235179/simple-way-to-repeat-a-string-in-java – Trying

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在技術上仍然會通過不斷跳回遞歸函數的頂部而循環。