我正在尝试用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

07-26 04:11