我正在尝试编写一个程序,以打印一个人可以用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");
}

10-04 20:22