我试图编写一个程序来打印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");
}
答案 0 :(得分: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");
}
答案 1 :(得分: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");
}
}