2010-02-10 4 views
1
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 
    }... 

Pourquoi ne puis-je pas l'ajouter à l'arborescence? Je crois que les docs de Java disent que je fais ceci correctement.Java: Ajout à une liste de tableaux

Répondre

3

En premier lieu, Trésor aurait besoin soit hériter de RandomOccupant ou la mettre en œuvre (si elle est une interface).

Deuxièmement, si vous voulez ajouter à un moment donné dans la liste, la syntaxe est

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

Bien qu'il soit difficile de voir pourquoi vous ne faites pas juste

randOccupants.add(new Treasure(this)); 

depuis les éléments seront ajoutés dans l'ordre même si vous ne spécifiez pas d'emplacement.

0

Parce qu'il ne s'agit pas d'un produit aléatoire.

+0

mais je ne l'ai pas déclaré en tant que arrayList de type RandomOccupant? – dukevin

+1

Pour être plus précis, l'objet que vous ajoutez est une instance de Maze, qui n'est pas un RandomOccupant (ce que vous avez dit au compilateur randOccupants). –

+0

@GregS: Et si Treasure dérive de RandomOccupant? –

6

Vous pouvez le faire soit:

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

... ou ...

randOccupants.add(new Treasure(this)); 

les deux sont équivalents, puisque vous êtes toujours le nouvel annexant élément à la fin du tableau.

voir http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html

+0

merci, ça a marché! – dukevin

+0

@Kevin, juste curieux ... pourquoi n'avez-vous pas marqué cela comme la bonne réponse, car il est venu en premier et est celui que vous remerciez? –

+0

J'ai glissé @Kevin une vingtaine. :) –

0

Parce que vous utilisez la méthode add mauvaise. Vous appelez:

randOccupants.add(new Treasure(this)); 
1
  1. Vous essayez d'ajouter un trésor à un ArrayList de RandomOccupants, donc à moins de trésor est un RandomOccupant, qui ne va pas travailler. Le code donné ne précise pas si Treasure est une sous-classe de RandomOccupant, il n'est donc pas possible de dire ici si cela fait partie du problème. Ce que vous êtes en train de faire est d'ajouter un int à la liste ici, qui est certainement pas un RandomOccupant.

  2. La méthode add() de ArrayList renvoie une valeur booléenne ou vide selon la version que vous utilisez, donc vous ne pouvez pas l'assigner. Vous utilisez la méthode de façon incorrecte.

Les deux versions du complément() sont:

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

La deuxième version insère l'élément à la position spécifiée, et le premier qu'il insère à la fin. On peut supposer que ce que vous avez l'intention de faire est la suivante:

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

Mais bien sûr, cela suppose que Treasure est une sous-classe de RandomOccupant. Si ce n'est pas le cas, vous devrez changer le type de ArrayList pour qu'il contienne des Trésors.

Questions connexes