Java:添加到数组列表

时间:2010-02-10 00:20:22

标签: java syntax arraylist

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

为什么我不能将它添加到arraylist?我相信java文档说我正确地做到了这一点。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

首先,Treasure需要继承RandomOccupant或实现它(如果它是一个接口)。

其次,如果要将其添加到列表中的特定点,则语法为

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

虽然很难理解你为什么不这样做

randOccupants.add(new Treasure(this));

因为即使您没有指定位置,也会按顺序添加项目。

答案 2 :(得分:1)

  1. 你正在尝试将一个Treasure添加到RandomOccupants的ArrayList中,所以除非Treasure是一个RandomOccupant,否则它不会起作用。给定的代码并不清楚Treasure是否是RandomOccupant的子类,所以这里的代码不可能说出这是否是问题的一部分。

  2. 你真正在做的是在这里为列表添加一个int,它肯定是而不是RandomOccupant。

  3. ArrayList的add()方法返回boolean或void,具体取决于您使用的版本,因此您无法分配它。您使用的方法不正确。

  4. add()的两个版本是:

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

    第二个版本将元素插入指定位置,第一个版本将元素插入到末尾。据推测,你打算做的是:

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

    但当然,假设Treasure是RandomOccupant的子类。如果不是,那么你需要更改ArrayList的类型来保存Treasures。

答案 3 :(得分:0)

因为它不是RandomOccupant。

答案 4 :(得分:0)

因为您使用的是add方法错误。你会打电话:

randOccupants.add(new Treasure(this));