return Anweisungen und Array Elemente löschen

REC

Bekanntes Mitglied
Hallo zusammen,

Hab hier mal wieder ein simples Problem aber finde es nicht heraus.

Es geht darum das wir eine Array haben mit dem Namen "liste". In dieser Liste haben wir das Objekt Element welches eine entsprechende ID hat.
Die Aufgabe war es verschiedene Befehel für die Array selber zu programmieren.Zum Beispiel war ein Befehl,das ein Element immer zuvorderst eingefügt wurde.Für das musste man ja die restliche Elemente nach hinten schieben.
So, doch nun muss ich Elemente mit der entsprechende ID löschen.
Daraus ergeben sich 2 Fragen.

Grundsätzlich kann man ja keine Elemente einfach so löschen wie in einer ArrayList,darum dachte ich,ich muss die Elemente nachrutschen.Doch wenn ich das letzte Element der Liste löschen will,dann kann ich ja da nichts nachrutschen?

Dann ist da noch ein anders Problem. Bei der Methode "delete" muss ja ein boolean zurückgegeben werden, so wie mein Code unten ist funktioniert es nicht.
Der Compiler meint " This method must return a result of type boolean"Aber das mach ich doch?

Die Idee der Methode ist. Gehe die Liste durch falls keine passende ID gefunden wird dann schreib "Keine passende ID gefunden" Man so simpel aber ich check es nicht.😳
Kann mir hier jemand weiterhelfen?

Java:
@Override
	public boolean delete(int id) {

		for (int i = 0; i < anzEl; i++) {
			if (liste[i].getId() == id) {  
                                //Hier kommt dann der lösch Vorgang
				return true;
			} else {
				System.out.println("Keine passende ID gefunden");
				return false;
			}
		}

	}
 
Stubs in die richtige Richtung:
DU kontrollierst so gar nicht alle Elemente, sondern nur das Erste, wenn das schon nicht die gesuchte ID hat, gibst du ja direkt false zurück, d.h. die Methode wird beendet!
Lasse den else Teile einfach weg und gebe zum Schluss einfach false zurück. (das heißt ja, dass dann die ID nicht gefunden wurde)
 
Sieht du genau das habe ich befürchtet so simpel und ich überseh das.
Erst als du mich daruf aufmerksam gemacht hast das ich ja nur das erste Element kontrolliere fiel es mir auf :bloed:

Habe es nun so geändert nun funktioniert das wie gewünscht

Java:
public boolean delete(int id) {

		for (int i = 0; i < anzEl; i++) {
			if (liste[i].getId() == id) {

				return true;
			}
		}
		System.out.println("Keine passende ID gefunden");
		return false;

	}

Aber kannst du mir ein weiter Hinweis auf Problem geben mit dem Löschen der Elemente aus der Liste?Speziell das letze Element 🙂
 
Gibt sicherlich mehrere Möglichkeiten.
Eine wäre, einfach ein neues Array zu erstellen welches einfach um die Länge eins kleiner ist, und eben alle Objekte aus dem alten enthält, bis auf das eine.
Entweder du baust dir das selber oder evtl. mit System.arraycopy o.ä.,
 
Ich glaube, wenn man Arrays dynamisch haben möchte, sollte man dann doch auf fertig implementierte Listen-Typen aus java.util zurückgreifen. Bspw. eine ArrayList.
Die Klassen aus dem Collections-Framework sind mächtig und ihre Anwendung ist recht einfach.
 
Nun ja eigentlich ist es schon die bessere Lösung mit einer ArrayList.
Aber aufgrund der Übung dürfen wir nicht eine ArraList benutzen.Aber ich verfolge mal den Ansatz mit einer neuen Array.
 
So habe es nun so gemacht.Hoffe das dies auch eine "aktzeptable" Lösung ist.Eben ArrayList wäre sicher einfacher aber man durfte sie nicht benutzen.
Die Idee ist das ich etwas lösche und dann alle Elemente nachrutsche.Am Schluss habe ich dann 2x das gleiche Element,daher kopiere ich die Liste nochmal ohne das letzte Element

Java:
public boolean delete(int id) {
        //Geht den Array durch.
		for (int i = 0; i < anzEl; i++) {
			
			if (liste[i].getId() == id) {
				
				for (int z = i; z < anzEl - 1; z++) {
					liste[z] = liste[z + 1];
				}
				
				System.arraycopy(liste, 0, liste2, 0, anzEl - 1);
				
				anzEl--;
				liste = liste2;

				return true;
			}
		}
		System.out.println("Keine passende ID gefunden");
		return false;
 

Neue Themen


Zurück
Oben