如何将类的实例添加到2D ArrayList

时间:2019-10-04 01:12:00

标签: java arraylist

我有一个问题,我需要创建一个可以由用户定义的特定大小的网格,否则默认为7。网格上的每个单元格本身都可以包含项目,因此以某种方式它是3D ArrayList。我决定要做的是创建一个Grid类,它将是一个2D ArrayList,然后有一个名为Cell的单独的类,它只是一个ArrayList。因此,目标是拥有大小为nxn的2D ArrayList,该数组将具有Cell类的n ^ 2个实例。但是,我在遍历创建的ArrayList时遇到了麻烦,并且开始认为我一开始就将2D ArrayList弄错了。本质上,我试图获得帮助的是如何实例化和填充Cell的所有实例的2D ArrayList。

import java.util.ArrayList;

class Cell {
    private ArrayList contents = new ArrayList();
}

class Grid {

    public ArrayList<ArrayList> grid = new ArrayList<ArrayList>();

    public Grid () {
        for (Object array : this.grid){
            ArrayList new_array = (ArrayList) array;
            for (int i=0; i<7;i++){
                this.grid.add(new Cell());
            }
        }
    }

    public Grid (int size) {
        for (Object array : this.grid){
            ArrayList new_array = (ArrayList) array;
            for(int i=0; i < size; i++){
                this.grid.add(new Cell());
            }
        }
    }

}

1 个答案:

答案 0 :(得分:0)

我认为您没有初始化网格。 如果要制作2D网格,则应先制作行,然后再向行添加项目,并应指定内部arraylist的类型。

class Cell {
    private ArrayList contents = new ArrayList();
}

class Grid {
    public ArrayList<ArrayList<Cell>> grid = new ArrayList<ArrayList<Cell>>();

    //Generate 7 by 7 grid
    public Grid() {
        for (int i = 0; i < 7; i++) {
            ArrayList<Cell> innerList = new ArrayList<Cell>();
            for (int j = 0; j < 7; j++) {
                innerList.add(new Cell());
            }
            grid.add(innerList);
        }
    }

    //Generate size by size grid
    public Grid(int size) {
        for (int i = 0; i < size; i++) {
            ArrayList<Cell> innerList = new ArrayList<Cell>();
            for (int j = 0; j < size; j++) {
                innerList.add(new Cell());
            }
            grid.add(innerList);
        }
    }

}