Yahoo Clever wird am 4. Mai 2021 (Eastern Time, Zeitzone US-Ostküste) eingestellt. Ab dem 20. April 2021 (Eastern Time) ist die Website von Yahoo Clever nur noch im reinen Lesemodus verfügbar. Andere Yahoo Produkte oder Dienste oder Ihr Yahoo Account sind von diesen Änderungen nicht betroffen. Auf dieser Hilfeseite finden Sie weitere Informationen zur Einstellung von Yahoo Clever und dazu, wie Sie Ihre Daten herunterladen.

Wie kann ich ein Objekt aus einem Array löschen?

Ich hab ein Arrays mit vier Orten und zwei Leuten. Außerdem habe ich ein Array Versuche. Wenn Person1 im Ort 1 zweimal war soll er nicht mehr reindürfen und wenn Person1 und 2 im Ort 1 zweimal waren, soll Ort1 gelöscht werden.

Wenn man reingeht bekommt man 10 Punkte und wenn ich das 3mal reinwill sollen die alten Punkte übernommen werden

Update:

public static String [] arrSkispringer = {"Loitzl","Schlierenzauer"};

public static String [] arrSprungort = {"Bischofshofen","Garmisch","Innsbruck","Obersdorf"};

public static double [] arrWeite = {137.00,140.00,130.00,140.00};

public static double [] arrPunkte = {0,0,0,0,0};

public static double[] arrVersuche = {8,8};

2 Antworten

Bewertung
  • Anonym
    vor 1 Jahrzehnt
    Beste Antwort

    Anders als in Collection wie z.B. die ArrayList kann man in Java (das meinst Du ja wohl) keine Elemente aus Array löschen, da diese eine feste Länge haben. Es gibt allerdings die folgende statische Funktion, mit der man so etwas lösen kann:

    arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    In Deinem Beispiel:

    Object[] objOrt = new Object[4];

    ...

    // löschen des ersten Objektes aus dem Array

    Object[] objOrtNeu = new Object[objOrt.length - 1];

    System.arraycopy(objOrt, 1, objOrtNeu, 0, objOrtNeu.length);

    objOrt = objOrtNeu;

    Es wird also ein neues Array von Objekten angelegt, das um 1 kleiner ist als das alte, anschließend kopiert man den Inhalt des alten ab der 2. Position in das neue Array und weist der alten Array-Referenz die Neue zu.

    Nachtrag:

    Wie ein Element aus einem Objekt-Array gelöscht werden kann, habe ich ja gezeigt. Du müsstest in meinem obigen Beispiel nur objOrt durch arrSprungort ersetzen.

    Mein Verdacht ist allerdings, dass Du darauf hoffst, dass Dir hier jemand Deine Hausaufgabe komplett löst. Auch wenn Du dass per Arrays lösen musst, ich halte Deinen Lösungsansatz für ungeeignet, weil Du ja für jeden Springer ein Array von Orten, und dann für jede Kombination von Springer und Array von Orten ein Array mit Ergebnissen benötigst!

    @tquadrat_org:

    Unter löschen eines Objektes verstehen wir scheinbar etwas anderes. Klar kann man die Objektreferenz löschen bzw. ersetzen, das Array wird damit aber nicht in seiner Größe angepasst, und genau das passiert bei der von mir skizzierten Lösung. Hältst Du mich für so blöd oder Dich für so schlau? Dass er nur das Rücksetzen einer Objektreferenz gefragt hat, was ja ausgesprochen trivial ist, davon gehe ich bei einer solchen Frage nicht aus!

    Dass die Lösung mit Arrays wenig sinnvoll ist, habe ich ihm schon in einer anderen Frage zu diesem Thema geschrieben, aber angeblich sei das die Vorgabe...

  • vor 1 Jahrzehnt

    @TheCoder: Noch mal die Java-Spezifikation nachlesen: natürlich kann ich ein Objekt aus einem Array löschen!

    Object [] array = new Object [10];

    //---* Array füllen, hier mit Strings *---

    for( int i = 0; i < array.length; ++i ) array [i] = Integer.toString( i + 1 ) + ". Eintrag";

    //---* Und jetzt löschen wir den Eintrag an der 3. Stelle *---

    array [2] = null;

    Voila!

    In Java ist ein Array nur ein Vektor (eine Liste, Ansammlung, such Dir was aus) von REFERENZEN auf Objekte, anders wie in C, wo es auch ein Vektor der Objekte selbst sein kann. Aber in beiden Fällen entfernt die Zuweisung von null das Objekt, zumindest von der Logik her.

    Der Ansatz von TheCoder macht etwas ganz anderes ...

    Aber davon einmal abgesehen: die Aufgabenstellung mit Arrays in der vorgegebenen Form zu lösen ist SCHWACHSINN!

Haben Sie noch Fragen? Jetzt beantworten lassen.