2014-04-18 4 views
0

Я пытаюсь написать программу, которая печатает все шаблоны, которые можно создать с помощью ABC. Я позволяет пользователю определить, как долго это символы должны быть, но у меня возникают проблемы с запуском программы, потому что я получаю сообщение об ошибке, и я не знаю, что это неправильно ..Рекурсивно найти комбинации ABC в Java

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 Исключение в теме "main" java.lang.StackOverflowError \t at java.lang.StringBuilder.append (Неизвестный источник) \t at java.lang.StringBuilder. (Неизвестный источник) – user3550041

ответ

3

Как мошенника упоминает, ваш блок:

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

... будет выполнять только combos(counter + "A"); контекстуально к else заявления.

Следующие рекурсивные высказывания («B» и «C») будут выполнены независимо от вашего состояния if.

Это может привести к неисправности в вашем управлении потоком, следовательно, ваш 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"); 
    } 
} 
Смежные вопросы