2014-04-18 29 views
0

我正在嘗試編寫一個程序,用於打印所有可與ABC做出的模式。 我允許用戶以確定其角色應該有多長,但我有正在運行的程序麻煩,因爲我得到一個錯誤,我不知道什麼是錯..以遞歸方式在Java中找到ABC的組合

private static int userinput; 

public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 

    System.out.println("Enter the maximum number of characters"); 
    userinput = input.nextInt(); 
    combos(); 
} 

public static void combos() 
{ 
    combos(""); 
} 

private static void combos(String counter) 
{ 
    if (counter.length() == userinput) //base case 
     System.out.println(counter); 
    else //recursive case 
     combos(counter + "A"); 
     combos(counter + "B"); 
     combos(counter + "C"); 
} 
+4

嘗試使用括號 – Rogue

+1

什麼是錯誤? – John

+0

@John Exception in thread「main」java.lang.StackOverflowError \t at java.lang.StringBuilder.append(Unknown Source) \t at java.lang.StringBuilder。 (未知來源) – user3550041

回答

3

流氓提到,你的格擋:

else //recursive case 
    combos(counter + "A"); 
    combos(counter + "B"); 
    combos(counter + "C"); 

...將只執行combos(counter + "A");上下文到else聲明。

無論您的if條件如何,都將執行以下遞歸語句(「B」和「C」)。

這很可能會導致您的流量控制出現故障,因此您的StackOverflowError

添加括號附上else聲明:

else {//recursive case 
     combos(counter + "A"); 
     combos(counter + "B"); 
     combos(counter + "C"); 
} 
+0

它不只是可能.. :) – Gus

+0

謝謝,我忽略注意到我沒有添加括號! – user3550041

0

你忘了你的「遞歸案」的其他語句的大括號...

這並不工作:

private static void combos(String counter) { 
    if (counter.length() == userinput) //base case 
     System.out.println(counter); 
    else { 
     combos(counter + "A"); 
     combos(counter + "B"); 
     combos(counter + "C"); 
    } 
}