2010-02-10 65 views
1
public class Maze 
{ 
    public static final int ACTIVE = 0; 
    public static final int EXPLORER_WIN = 1; 
    public static final int MONSTER_WIN = 2; 
    private Square[][] maze; 
    private ArrayList<RandomOccupant> randOccupants; 
    private Explorer explorer; 
    private int rows; 
    private int cols; 

public Maze(Square[][] maze, int rows, int cols, int numTreasures, int numMonsters, String name) 
{ 
    int i; 
    this.maze = maze; 
    this.cols = cols; 
    this.rows = rows; 

    randOccupants = new ArrayList<RandomOccupant>(); 

    for (i = 0; i < numTreasures; i++) 
    { 
    randOccupants.add(i) = new Treasure(this); //COMPILE ERROR 
    }... 

爲什麼我不能將其添加到數組列表中?我相信java文檔說,我正確地做到了這一點。Java:添加到數組列表

回答

3

首先,寶需要無論是從RandomOccupant繼承或實現它(如果它是一個接口)。

第二,如果你想它在列表中的特定點添加,語法是

randOccupants.add(i,new Treasure(this)); 

雖然很難明白爲什麼你不只是做

randOccupants.add(new Treasure(this)); 

自即使您未指定位置,項目也會按順序添加。

0

因爲它不是RandomOccupant。

+0

但我沒有將其聲明爲RandomOccupant類型的arrayList? – dukevin 2010-02-10 00:25:36

+1

更準確地說,你要添加的對象 - 這個 - 是一個迷宮實例,它不是一個RandomOccupant(這是你告訴編譯器randOccupants將包含的內容)。 – 2010-02-10 00:26:09

+0

@GregS:如果Treasure派生自RandomOccupant會怎麼樣? – 2010-02-10 00:26:45

6

您可以執行:

randOccupants.add(i, new Treasure(this)); 

......或者......

randOccupants.add(new Treasure(this)); 

兩者是等價的,因爲你總是追加新的元素添加到數組的末尾。

看到http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html

+0

謝謝你,工作! – dukevin 2010-02-10 00:28:01

+0

@凱文,只是好奇......你爲什麼不把它作爲正確的答案,因爲它是第一個,是你感謝的那個? – 2010-02-10 00:32:05

+0

我滑倒@凱文二十。 :) – 2010-02-10 02:07:00

0

因爲你使用add方法是錯誤的。你會打電話:

randOccupants.add(new Treasure(this)); 
1
  1. 你試圖尋寶添加到RandomOccupants的ArrayList,所以除非寶是一個RandomOccupant,這是行不通的。給定的代碼並沒有說明Treasure是否是RandomOccupant的一個子類,所以從代碼中不可能說出這是否是問題的一部分。

  2. 你實際做的是在這裏添加一個int到列表中,這是絕對是不是RandomOccupant。

  3. 根據您使用的版本,ArrayList的add()方法返回boolean或void,所以您不能分配給它。您正在使用該方法不正確。

ADD的兩個版本()爲:

boolean add(E e) 
void  add(int index, E element) 

第二個版本插入元件在指定的位置,並在最後的第一個將其插入。據推測,什麼你打算做的是這樣的:

for(i = 0; i < numTreasures; ++i) 
    randOccupants.add(new Treasure(this)); 

不過,當然,這假定寶是RandomOccupant的子類。如果不是,那麼您需要更改ArrayList的類型以保存Treasures。