簡體   English   中英

Java:添加到數組列表

[英]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));

因為即使您沒有指定位置,項目也會按順序添加。

  1. 您正在嘗試將一個 Treasure 添加到 RandomOccupants 的 ArrayList,因此除非 Treasure 是 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));

但當然,這假設 Treasure 是 RandomOccupant 的子類。 如果不是,那么您需要更改 ArrayList 的類型以使其保存 Treasures。

因為它不是 RandomOccupant。

因為您使用的 add 方法錯誤。 你會打電話給:

randOccupants.add(new Treasure(this));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM