2016-05-03 18 views
1

Kann mir jemand mit diesem Java-Code helfen? Ich habe zwei Klassen und muss ein Set erstellen, das Instanzen der anderen Klasse speichern kann. hier ist die Probe ich es geschafft, zu "begehen" :)
Klasse A
Java - Set in der Lage, Instanzen einer anderen Klasse zu referenzieren

public Class Rabbit { 

    private String age; 

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

jetzt Klasse B:

public class ManyRabbits { 
private Set <String> setOfRabbits; 

nun diese Methode eine neue Instanz der schaffen soll Kaninchen und fügen Sie es zu der durch die Variable setOfRabbits dargestellten Menge

hinzu
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

Es sollte statt Set

+3

gesetzt und Sie müssen auch 'equals' und' hashCode' außer Kraft zu setzen in 'Rabbit' (es sei denn, Sie die Deduplizierung wollen von Identität getan werden). –

Antwort

0

Sprich:

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

setOfRabbits.add(new Rabbit()); 

Wenn die Set-Spur einer unbekannten Menge eines Objekts halten wird, versuche ich normalerweise mit einem ungenannten Instanz zu instanziiert. Dies würde sich hervorragend dazu eignen, zu einem Listener hinzuzufügen, sodass Sie z. B. jedes Mal, wenn der Benutzer klickt, ein neues Rabbit hinzufügen können.

Auf diese Weise können Sie beliebig viele Rabbit-Objekte hinzufügen. Versuchen:

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

Sie dies in älteren Versionen von Java sehen kann:

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

aber es ist nicht mehr notwendig

+1

Aber OP will ein 'Set', nicht eine' List'. –

0

Ihre ManyRabbits calss wie diese

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 
} 
werden soll

In 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 
} 

Verwenden Sie es durch so etwas wie

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

vielen Dank an alle. es ist in Ordnung, wenn ich addRabbit benutze und Rabbit r1 erstelle, aber was ist, wenn ich ein anderes Kaninchen erstellen will, wird es zuerst überschrieben? Ich muss in der Lage sein, mehr Kaninchen zum Set hinzuzufügen. –

1

rufen Sie benötigen Set declatation ändern:

private Set<Rabbit> setOfRabbits; 

Und Sie müssen auch diese beiden Verfahren, um ovweride nie Fügen Sie zweimal das gleiche Objekt in das Set ein.

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

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

Es ist irreführend, diese Implementierungen von 'hashCode' und' equals' vorzuschlagen, da sich diese Klasse genauso verhält, als würden Sie diese Methoden nicht überschreiben. Bitte schlagen Sie * nützliche * Implementierungen vor. –