繁体   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