Array in BlueJ aufrücken lassen?

KarlRanseierIII  12.05.2020, 17:00

Reden wir von der ArrayList Klasse? Die hat eine remove()-Methode.

Oder ist das irgendein eigenes Konstrukt?

INeedHelp275 
Fragesteller
 12.05.2020, 17:10

Nein, es gibt keine remove()-Methode.

3 Antworten

Ich verwende kein Java, aber statt das Item auf Null zu setzen, musst du's entfernen. Ist cdSammlung denn eine ArrayList? Dann dürfte sie eine Remove oder RemoveAt Methode haben.

EDIT: Oder was meinst du mit "Array-Liste"? Einfach ein Array oder die Klasse ArrayList? (falls es die in java auch gibt) Wenn es ein Array ist, muss du in einer Schleife die nachfolgenden Items um jeweils eine Position nach oben schieben.

Woher ich das weiß:Studium / Ausbildung – Datenverarbeitungs-Kfm, Hobby- und Profi-Programmierer
INeedHelp275 
Fragesteller
 12.05.2020, 16:55

Es ist ein Array, ich weiß auch, dass ich die nach oben schieben muss, aber nicht wie :)

0
DonkeyShot  12.05.2020, 17:57
@INeedHelp275

Deswegen hab ich dazu geschrieben mit einer Schleife. ;) .... Gab mittlerweile ne Antwort darauf, also tipp ichs jetzt nicht hier ein. Lesen kann ich den Java-Code zwar, aber selbst geschrieben hab ich noch keinen.

0

Folgend zwei Möglichkeiten.

Entweder du verrückst nur die Positionen der Elemente, lässt aber dann den null-Wert im Array. Das heißt, die letzten Positionen werden dann mit null-Werten belegt. So bleibt aber die Arraylänge erhalten, insofern das in irgendeiner Weise eine Rolle spielt.

Hier wird das erste Element einfach an die letzte Stelle gesetzt, alle anderen Elemente rücken um eine Stelle vor:

for (int i = 0; i < cds.length - 1; ++i) {
  cds[i] = cds[i + 1];
}

cds[cds.length - 1] = null;

Die zweite Option wäre, alle null-Werte einfach herauszufiltern und somit auch das Array zu verkleinern.

Da du ja beim Löschen weißt, dass es jetzt nur ein Element auf null gesetzt wird, ist auch klar, dass das Array nur um ein Element kleiner wird. Man legt sich ein neues Array an, mit einer neuen Größe.

CD[] newCds = new CD[cds.length - 1];

Dann kopiert man sich via Schleife die Werte. Entweder wird je Iteration geprüft, ob die aktuelle Position den null-Wert enthält und dieser wird übersprungen oder, wenn es stets eine bestimmte Position ist (z.B. immer das erste Element), setzt man den Zähler bereits entsprechend.

for (int i = 1; i < cds.length; ++i) {
  newCds[i - 1] = cds[i];
}

cds = newCds;
           for(int i=0;i<cdanzahl;i++)
           {
               if(cdSammlung[i].gibTitel()== pTitel)
               {
                   cdSammlung[i] = null;
                   raus = true;
                   if (i==cdzahl-1) break;
                   else cdanzahl--;
               }
               if (raus==true) cdSammlung[i]=cdSammlung[i+1];
           }

So in etwa müßte das doch hinhauen ... ah vergessen, das NULLen beim rausnehmen kannst Du Dir sparen, Du mußt aber am Ende das ehemals letzte Element 0en.

Das eigentlich blöde ist doch eher, daß das Array nicht dynamisch umskaliert, willst Du das wirklich so machen?