[英]Java: Adding to an array list
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 文檔說我這樣做是正確的。
您可以執行以下任一操作:
randOccupants.add( i, new Treasure(this) );
...或者...
randOccupants.add( new Treasure(this) );
兩者是等價的,因為您總是將新元素附加到數組的末尾。
請參閱https://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html 。
首先,Treasure 需要從 RandomOccupant 繼承或實現它(如果它是一個接口)。
其次,如果你想在列表中的特定點添加它,語法是
randOccupants.add(i,new Treasure(this));
雖然很難理解你為什么不去做
randOccupants.add(new Treasure(this));
因為即使您沒有指定位置,項目也會按順序添加。
您正在嘗試將一個 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。
因為它不是 RandomOccupant。
因為您使用的 add 方法錯誤。 你會打電話給:
randOccupants.add(new Treasure(this));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.