我正在尝试用Java做一个简单的代码:我有一个叫做“ Bloc”的类,它创建块(正方形),在其中创建一个随机宽度(大)和2个整数之间的随机高度(hauteur) ,然后创建一个随机数的块(nombreBloc)。我还创建了一个ArrayList,将每个块放入其中,以查看我还剩下多少。
因此,我执行了一个名为“ insererBlocList”的功能(将块插入ArrayList),该函数创建了块的“ nombreBloc”(numberBloc)并将其放入ArrayList。
我有一个图形界面,其中我有1个窗口面板,在其中有2个其他面板:其中之一是将我创建的每个块都放入其中。
这是我的问题,我的函数“ insererBlocList”中有一个“ StackOverflowError”,这意味着存在无限循环,但是在编写代码路径后,我看不到我在哪里做错了……这里是代码:
集团集团:
public class Bloc extends JPanel{
private int hauteur, largeur, nombreBloc;
private boolean premierPassage = true;
private ArrayList<Bloc> listeBlocRestant;
private Random rand = new Random();
public Bloc() {
this.hauteur = 10 + rand.nextInt(50 - 10);
this.largeur = 10 + rand.nextInt(50 - 10);
listeBlocRestant = new ArrayList<Bloc>();
if(premierPassage == true) {
this.nombreBloc = 5 + rand.nextInt(30 - 5);
insererBlocList();
}
}
public ArrayList<Bloc> insererBlocList(){
premierPassage = false;
for(int i=0; i<nombreBloc; i++) {
Bloc bloc = new Bloc();
listeBlocRestant.add(bloc);
}
return listeBlocRestant;
}
面板块的GUI部分:
private JPanel initPanelBloc() {
panelBloc = new Bloc();
}
最佳答案
您的Bloc
构造函数调用insererBlocList()
,并且insererBlocList()
创建其他Bloc
实例(对于每个实例,构造函数调用insererBlocList()
),这导致无限的方法调用链,从而导致StackOverflowError
。insererBlocList()
构造函数不应该调用Bloc
。