ArrayList.remove () entfernt kein Objekt

7

Ich weiß, dass dies eine chaotische Implementierung ist, aber ich habe grundsätzlich diesen Code (ich habe alles geschrieben), und ich muss in der Lage sein, einen Schüler oder Lehrer aus der Liste zu entfernen, wenn ich die entsprechende Menüauswahl verwende. Alles andere im Code funktioniert, nur die Menüoptionen 3 und 4. Ich gebe beim Löschen genau die gleichen Informationen für das Objekt ein. Hier ist der Code. Alle drei Klassen sind unten.

Treiberklasse:

%Vor%

Schülerklasse:

%Vor%

Kursleiterklasse:

%Vor%     
vaindil 02.10.2012, 20:01
quelle

4 Antworten

13

Sie müssen die Methode equals() für die Klassen Student und Instructor korrekt überschreiben.

Wenn das Überschreiben gleich ist, ist es auch besser, hashCode() zu überschreiben. neuer Student (Name, ID, GPA);

Zum Beispiel so etwas:

%Vor%

Auf diese Weise geben Sie dem ArrayList eine Chance, herauszufinden, welches Objekt dem entspricht, das Sie beim Löschen als Parameter übergeben haben. Wenn Sie die obigen Methoden nicht überschreiben, verwendet es die Standardimplementierungen in Object , die Speicheradressen vergleichen, die definitiv anders sind, wenn Sie ein neues Student -Objekt entfernen.

Sie können noch mehr Informationen über die 2 Methoden in den Javadocs für Object lesen.

    
Dan D. 02.10.2012, 20:03
quelle
6

Sie haben die Methode equals für Student und Instructor .

Diese Methode wird von ArrayList verwendet, um zu überprüfen, ob 2 Objekte gleich sind. Ohne eine benutzerdefinierte Implementierung werden nur Referenzen überprüft, die in Ihrem Fall anders sind, da es sich um zwei verschiedene Objekte handelt.

Um benutzerdefinierte Gleichheit bereitzustellen, müssen Sie alle Felder der beteiligten Klassen überprüfen, damit sie übereinstimmen. Dies kann rekursiv erfolgen, indem equals für Instanzvariablen aufgerufen wird.

    
Jack 02.10.2012 20:04
quelle
6

Sie müssen equals- und hashcode-Methoden überschreiben, damit Sammlungen ordnungsgemäß funktionieren.

%Vor%

Da Sie nur ArrayList verwenden, wird die Hashcode-Methode nicht verwendet, aber es ist immer noch eine gute Methode, sie bereitzustellen.

%Vor%     
Amit Deshpande 02.10.2012 20:03
quelle
2

Das Überschreiben der equals-Methode von Student und Instructor funktioniert:

Hier ist ein Beispiel für die Studentenklasse:

%Vor%

Sie können auch hashCode() :

überschreiben %Vor%     
NominSim 02.10.2012 20:05
quelle

Tags und Links