Java使用ArrayList启动实例

时间:2017-06-15 21:54:31

标签: java

我是Java的初学者,我正在尝试编写基于DFS算法的迷宫生成器,但是,我遇到启动问题。

以下是代码:

class MazeCell {
    int x, y;
    boolean visited, onStack;
}

class MazeGenerator {
    Stack stack = new Stack();
    Random myRand = new Random();
    int columns = 80;
    int rows = 25;

    public void Generate() {
        ArrayList <MazeCell> cells = new ArrayList <MazeCell> (columns*rows);
        int x, i = 0, y = 0;
        for (y = 0; y < rows; ++y) {
            for (x = 0; x < columns; ++x) {
                cells.set(i) = new MazeCell;
                cells.set(i).visited  = false;
                cells.set(i).onStack = false;
                cells.set(i).x = x;
                cells.set(i).y = y;
                ++i;
            }
        }
    }
}

有人可以帮忙告诉我这是最好的方法吗?我是以正确的方式尝试的吗?

2 个答案:

答案 0 :(得分:2)

您的代码中存在相当多的逻辑和语法错误。试试这个,并比较它们以查看错误:

for (int y = 0; y < rows; ++y) {
    for (int x = 0; x < columns; ++x) {
        MazeCell cell = new MazeCell();
        cell.visited = false;
        cell.onStack = false;
        cell.x = x;
        cell.y = y;
        cells.add(cell);
    }
}

答案 1 :(得分:0)

Generate()函数中,您已初始化cells ArrayList。因此,在初始化之后,它是一个空的ArrayList。请注意,

  

ArrayList.set(int index, E element)用指定的元素替换此列表中指定位置的元素。

因此,在空ArrayList中设置元素没有意义。你可能需要,

  

ArrayList.add(E e)方法,将指定的元素E附加到列表的末尾。

此外,对于for(y = 0; y > rows; ++y)for(x = 0; x > columns; ++x)这样的循环条件没有意义。你应该按照@shmosel在他的回答中提出的建议。