我正在尝试在Java中创建一个类,它构建一个类型为Action
的对象,该对象包含三个整数并将其返回到数组history
中的另一个类,其中history
是一个
类型为Action
的数组。当它被调用时,我立刻得到一个无限循环;因此堆栈溢出。
错误 - 我打印了1行,然后继续......
Exception in thread "main" java.lang.StackOverflowError
at sudokugame.Action.<init>(Action.java:7)
类别:
public class Action {
Action a;
public Action(int i, int o, int p){
a = new Action(i,o,p);
}
public void setAction(int n, int b, int c){
}
public Action getAction(){
return a;
}
}
答案 0 :(得分:12)
你的构造函数永远递归地调用它自己。溢出堆栈的可靠方法:)
public Action(int i, int o, int p){
//why do you do this?
a = new Action(i,o,p);
}
也许您真正想要做的只是在类实例中存储i,o和p?
public class Action {
int i;
int o;
int p;
public Action(int i, int o, int p){
this.i = i;
this.o = o;
this.p = p;
}
...
}
(编辑:有关更全面的示例,请参阅other answer)
答案 1 :(得分:3)
尝试这样做:
public class Action {
int i;
int o;
int p;
public Action(int i, int o, int p){
this.i = i;
this.o = o;
this.p = p;
}
public void setAction(int n, int b, int c){
this.i = i;
this.o = o;
this.p = p;
}
public Action getAction(){
return this;
}
}
答案 2 :(得分:2)
问题在于:
a = new Action(i,o,p);
您正在为类本身的构造函数中的新实例再次调用构造函数。由于每次对构造函数的后续调用都将创建一个新的构造函数调用,因此堆栈无法展开,因此会产生堆栈溢出。
答案 3 :(得分:0)
您自己实例化该类。
答案 4 :(得分:0)
你的Action类真的需要保持对另一个Action的引用吗?
Action a;
具体来说,这行必要吗?你用它做什么用?
答案 5 :(得分:0)
确保您的构造函数具有递归调用。
答案 6 :(得分:0)
Command design pattern是一种处理某种情况的方法,在这种情况下,你想要采取行动的历史,以便撤消,等等。
答案 7 :(得分:0)
构造函数有递归调用。