löschen eines Objekts aus einem array [java]
Mein Programm fragt den Benutzer zur Eingabe des Vornamen, Nachnamen und das Alter von 5 Personen und speichert Sie in einem array. Ich will schreiben Sie eine Methode, die fragt den Benutzer, den Sie löschen möchten, aus dem array und löscht dann diesen Mitarbeiter. Ich weiß, in arrays, die Sie technisch nicht das löschen eines Objekts aus einem array, nur ersetzen.
Dies ist, was ich bisher getan habe:
private void deleteEmployee(){
Scanner scan = new Scanner(System.in);
System.out.println("Enter the first name of the employee you want to delete from the list")
String name = scan.nextLine();
for (int i = 0; i < employees.length; i++) {
if (employees[i].getFirstName().equals(name)){
employees[i] = employees[employees.length - 1];
break;
}
if (i == employees.length - 1) {
System.out.println("That requested person is not employed at this firm.")
}
}
Mein problem ist, dass es nicht sinkt die array-Größe von 1, nur es ersetzt die person, die ich löschen möchte, mit der letzten person, die in meinem array. Meine Ausgabe hat die letzten Mitarbeiter in dem array zweimal wiederholt (in seiner letzten index und der index der person, die wollte ich löschen) Wie kann ich dieses Problem beheben?
- Können Sie mutable collections wie eine verkettete Liste oder array notwendig?
- Naja, man kann nicht wirklich löschen Sie ein element aus einem array, wie Sie sagte. Am besten Sie hoffen kann, ist zu geben, das entfernte element ein null-Wert statt. So ist es leer. Oder Sie könnte alternativ stellen Sie ein neues array mit length-1 Elemente und kopieren Sie alle gewünschten Elemente, um das array.
- Sie können nicht ändern die Größe eines Arrays einmal erklären Sie es. Sollten Sie gehen mit etwas, das wie ein array-Liste.
- Wenn Sie nichts dagegen haben, dass null-Werte im array, set-Mitarbeiter[i] auf null, nicht zu der Letzte Angestellte. Dies wird helfen, überschneidungen zu vermeiden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie ersetzen die Mitarbeiter mit null Wann auch immer wollen, um es zu löschen. beim einfügen eines neuen emplyee, können Sie den ersten Blick auf eine null-index und platzieren Sie es.
NullPointerException
? Wenn ja, das bedeutet Sie müssen überprüfen, und stellen Sie sicher, dass es nicht null ist, bevor Sie versuchen, Daten aus.Den Sie verwenden möchten, können ArrayLists für dieses problem. ArrayLists sind Java die Möglichkeit zu schaffen, ein veränderliches array. Mit arraylists, kann das array automatisch erweitert und reduziert, basierend auf der Anzahl der Objekte im Array.
Können Sie hinzufügen und löschen von Objekten mit den index-oder Variablennamen.
Beispielcode:
Dann können Sie die folgenden Methoden verwenden:
Check this out mehr-Referenz: http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
Die Länge eines array in Java kann nicht geändert werden, es ist initialisiert, wenn Sie es schaffen.
Und Sie können nicht manuell löschen ein element sofort(wie C++). Sie können es auf null, dann warten für die JVM zu verwerten.
Für die Bequemlichkeit, können Sie List collection in java.util-Paket. Sie sind bequem für entfernen/hinzufügen der Elemente.
Ich schlage vor, Sie machen Verwendung von ArrayList, hatte er schon die remove-Methode. Dass die Methode auch die Größe der Liste zu reduzieren, indem Sie die Anzahl der entfernten Elemente
Eine Möglichkeit: Sie können zwar nicht ändern, die tatsächliche Länge des Arrays, die Sie verwenden können, eine weitere variable zu verfolgen, die "eigentliche" Länge (d.h. die Anzahl der Elemente im array, die Sie kennen, sind gültig):
Das Programm nur "weiß", daß die array-Elemente von
employees[currentLength]
durchemployees[employees.length - 1]
sind nicht sinnvoll. Sie könnte auch jene bedeutungslose Elementenull
so, dass es keine unbenutzten Referenzen, die verhindern könnten, dass einige Objekte vom garbage Collector entfernt wird (dies wäre wichtig in einem größeren Programm). Dieser Ansatz kann ein wenig fehleranfällig, weil Sie daran denken müssen, verwenden SiecurrentLength
stattemployees.length
. Insgesamt denke ich, dass es besser ist, um eineArrayList
, die hat einen Weg, um Elemente zu löschen.Hallo, die Dinge werden einfacher für Sie, wenn Sie ein
ArrayList
statt einerarray
, Hier ist, wie Ihr code Aussehen wird, vorausgesetzt, dass Sie eineEmployerClass
Umsetzung dergetFirstName()
MethodeGlück !
Kann man nicht wirklich löschen, sondern können Sie nur machen es zu null.
ArrayList oder LinkedList ist besser für diese Aufgabe. In beiden können Sie builtin-Methoden zum hinzufügen oder entfernen von Elementen und die Größe wird automatisch behandeln.
Gibt es einige Punkte:
(1) Java array(verwenden Sie das symbol "[]") ist eine Feste Größe der Struktur. Es bedeutet, dass Sie müssen angeben, dass die Größe(Länge) des Arrays, wenn Sie Sie erstellen. Wie diese:
Dem Zweck, die spezifische Größe ist zu sagen, Java-compiler, um Speicher. Array zugeordnet ist zusammenhängenden Speicher. Sobald die Zuweisung erfolgt ist, dessen Größe nicht geändert werden konnte.(Sie können Bild gibt es weitere Daten "hinter" dem array, wenn das array extende, überlappen die anderen Daten).
(2) Wenn Sie möchten, um eine flexible data collection für Ihre hinzufügen/entfernen, können Sie
ArrayList
oderLinkedList
. Diese Java-built-in-Sammlungen erweitert werden kann, indem Sie sich, wenn nötig.Was mehr ist:
remove(Object o)
richtig, Sie haben zur Umsetzung Ihres Objektspublic boolean equals(Object)
Funktion.Ref code: