我正在尝试编写一个程序,以打印一个人可以用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");
}
最佳答案
如流氓所言,您的封锁:
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");
}