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% 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.
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.
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%