我是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;
}
}
}
}
有人可以帮忙告诉我这是最好的方法吗?我是以正确的方式尝试的吗?
答案 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在他的回答中提出的建议。