2010-02-10 62 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。