Java: добавление в список массивов - PullRequest
1 голос
/ 10 февраля 2010
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 ]

6 голосов
/ 10 февраля 2010

Вы можете сделать либо:

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

3 голосов
/ 10 февраля 2010

Во-первых, Treasure необходимо либо унаследовать от RandomOccupant, либо реализовать его (если это интерфейс).

Во-вторых, если вы хотите добавить его в определенную точку списка, синтаксис будет

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

Хотя трудно понять, почему вы просто не делаете

randOccupants.add(new Treasure(this));

, поскольку элементы будут добавляться по порядку, даже если вы не указали местоположение.

1 голос
/ 10 февраля 2010
  1. Вы пытаетесь добавить Treasure в ArrayList для RandomOccupant, поэтому, если Treasure не является RandomOccupant, это не сработает. Данный код не дает понять, является ли Treasure подклассом RandomOccupant, поэтому из приведенного здесь кода невозможно сказать, является ли это частью проблемы.

  2. Что вы на самом деле делаете, так это добавляете к списку int, который определенно не является RandomOccupant.

  3. Метод add () ArrayList возвращает либо логическое значение, либо значение void в зависимости от используемой версии, поэтому вы не можете назначить его. Вы используете метод неправильно.

Две версии add ():

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

Вторая версия вставляет элемент в указанное положение, а первая вставляет его в конец. Предположительно, то, что вы собираетесь сделать, это:

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

Но, конечно, это предполагает, что Сокровище является подклассом RandomOccupant. Если это не так, вам нужно изменить тип ArrayList, чтобы он содержал Treasures.

0 голосов
/ 10 февраля 2010

Потому что вы используете метод add неправильно. Вы бы позвонили:

randOccupants.add(new Treasure(this));
0 голосов
/ 10 февраля 2010

Потому что это не RandomOccupant.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...