2017-06-15 80 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); 
    } 
}