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文档说我正确地做到了这一点。
答案 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)
你正在尝试将一个Treasure添加到RandomOccupants的ArrayList中,所以除非Treasure是一个RandomOccupant,否则它不会起作用。给定的代码并不清楚Treasure是否是RandomOccupant的子类,所以这里的代码不可能说出这是否是问题的一部分。
你真正在做的是在这里为列表添加一个int,它肯定是而不是RandomOccupant。
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));
但当然,假设Treasure是RandomOccupant的子类。如果不是,那么你需要更改ArrayList的类型来保存Treasures。
答案 3 :(得分:0)
因为它不是RandomOccupant。
答案 4 :(得分:0)
因为您使用的是add方法错误。你会打电话:
randOccupants.add(new Treasure(this));