2017-06-15 81 views
-2

我是Java初学者,我试图编写基于DFS算法的迷宫生成器,但是,我遇到了启动问题。Java使用ArrayList初始化实例

下面的代码:

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; 
      } 
     } 
    } 
} 

谁能帮助,告诉我什么是做到这一点的最好方法是什么?我以正确的方式尝试吗?

+3

你能澄清“我有一个启动问题”吗?它如何[*不起作用*](http://importblogkit.com/2015/07/does-not-work/)? – Pshemo

+1

我不知道如何使用它作为set(int index,E element)函数中的一个元素,它需要 – whtkj

+1

你能解释为什么你甚至在这里使用'set'吗?适合你的情况的方法是'add'。 – Tom

回答

0

在你Generate()功能,你已经初始化cells的ArrayList。所以,在初始化之后,它是一个空的ArrayList。请注意,

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

所以,在一个空ArrayList中设置一个元素是没有意义的。您可能需要:

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

此外,具有for循环条件,如for(y = 0; y > rows; ++y)for(x = 0; x > columns; ++x)没有意义。你应该遵循@shmosel在他的回答中给出的建议。

+0

非常感谢,现在有道理 – whtkj

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); 
    } 
}