2016-05-03 5 views
1

Quelqu'un peut-il m'aider avec ce code java? J'ai deux classes et j'ai besoin de créer un qui peut stocker des instances de l'autre classe. voici l'échantillon que je réussi à "commit" :)
classe A
Java - Ensemble capable de référencer des instances d'une classe différente

public Class Rabbit { 

    private String age; 

    //constructor for instance of Rabbit <br> 
    public Rabbit(String rabAge) { 
     super(); 
     this.age = rabAge; 
    } 

maintenant la classe B:

public class ManyRabbits { 
private Set <String> setOfRabbits; 

maintenant cette méthode devrait créer une nouvelle instance de la Lapin et l'ajouter à l'ensemble représenté par la variable setOfRabbits

public void addRabbit (String age)` { 

    //and I don't know what should go next...something like: ` 
    Rabbit r1 = new Rabbit("10");` <br> 
    setOfRabbits.add(r1); 

} 
+4

Il doit être réglé au lieu de Set

+3

Et vous aurez également besoin de passer outre '' equals' et hashCode' dans 'Rabbit' (sauf si vous voulez que la déduplication à faire par l'identité). –

Répondre

0

Dis:

Set<Rabbit> setOfRabbits = new HashSet<>(); 

setOfRabbits.add(new Rabbit()); 

Lorsque l'ensemble sera garder une trace d'une quantité inconnue d'un objet, j'essaie généralement d'instancier avec une instance sans nom. Cela fonctionnerait très bien pour ajouter à un auditeur de sorte que vous pourriez, disons, ajouter un nouveau lapin chaque fois que l'utilisateur clique. De cette manière, vous pouvez ajouter autant d'objets Rabbit que vous le souhaitez. Essayez:

for(i = 0; i < 10; i++) { 
    setOfRabbits.add(new Rabbit()); 
} 

Vous pouvez voir cela dans les anciennes versions de Java:

Set<Rabbit> setOfRabbits = new HashSet<Rabbit>(); 

mais il n'est plus nécessaire

+1

Mais OP veut un 'Set', pas un' List'. –

0

votre ManyRabbits calss devrait être comme celui-ci

public class ManyRabbits 
{ 
    private Set<Rabbit> setOfRabbits = new HashSet<Rabbit>(); 

    public void addRabbit (String age) 
    { 
     Rabbit r1 = new Rabbit(age); 
     setOfRabbits.add(r1); 
    } 

} 
0
public class Rabbit { 

    private String age; 

    //constructor for instance of Rabbit 
    public Rabbit(String rabAge) { 
    super(); 
    this.age = rabAge; 
    } 

    // more methods if necessary 
} 

Dans ManyRabbits:

public class ManyRabbits { 
    private Set <Rabbit> setOfRabbits = new HashSet<>(); 

    public void addRabbit (String age) { 
    Rabbit r1 = new Rabbit(age); 
    setOfRabbits.add(r1); 
    } 

    // more methods if necessary 
} 

utiliser en appelant quelque chose comme

ManyRabbits manyRabbits = new ManyRabbits(); 
manyRabbits.addRabbit("10"); 
manyRabbits.addRabbit("20"); 
manyRabbits.addRabbit("30"); 
+0

merci beaucoup tout le monde. c'est ok quand j'utilise addRabbit et crée Rabbit r1 mais que si je veux créer un autre lapin, va-t-il écraser le premier? Je dois pouvoir ajouter plus de lapins à l'ensemble. –

1

Vous devez changer votre jeu declatation:

private Set<Rabbit> setOfRabbits; 

Et vous devez également ovweride les méthode à deux afin de ne jamais insérez deux fois le même objet dans l'ensemble.

@Override 
public int hashCode() { 
    // Your own implementation 
    return ...; 
} 

@Override 
public boolean equals(Object o) { 
    // Your own implementation 
    return ...; 
} 
+1

Il est trompeur de suggérer ces implémentations de 'hashCode' et' equals', car cette classe aurait le même comportement que si vous n'aviez pas substitué ces méthodes. Merci de suggérer des implémentations * utiles *. –