Array reversed in ein neues Array

port45

Mitglied
Hallo zusammen,

habe wieder ein problem bei einer Methode 🙁
Java:
public Array<T> reversed() 
{
        
        Object[] temp = new Object[data.length];
        
        for(int i = 0, j = data.length-1; i <(( data.length) /2); i++, j--)
       {
            temp[j] = data[i];        
        }
        	
        return this;
}

Das Müsste ja eigentlich das Aktuelle Array umdrehen und in einem anderen Array speichern, wobei das erste Array Data nicht beeinflusst wird.

nur weiß ich nicht wie das neue Array zurückgeben werden soll.
This gibt doch das Data array zurück und nicht das neue oder?
aber ein return temp funktioniert nicht, da ich dann einen cast machen soll aber (T) temp geht nicht 🙁
 
Was ist denn "Array" für ein Datentyp bei dir?

Wenn der Compiler da keine Fehlermeldung anzeigt - und du es damit tatsächlich irgendwo deklariert hast, dann deklariere einfach dein temp auch als Array<T> und nicht als Object.
 
Zuletzt bearbeitet:
Also ich habe das so verstanden, das T für ein Typlosen Array steht.
Also das dann je nachdem, was dort eingelesen wird, das Array sich ändert.
Heißt ins Array kommen integer wird es zum integer Array und kann nur noch integer speichern.

edit: hab das Quatsch erzählt.
In javadoc steht das

T get(int index)
Gibt das index-te Element zurueck.


Ja aber wenn ich es als Array<T> deklariere dann kann ich dort glaub ich nicht das alte Array umgedreht dort reinkopieren oder?

Aber ich versteh das nicht.
Array<T> soll das umgekehrte Feld zurück geben.
Nimmt es aber nicht an selbst mit (T) cast nicht

Edit:

Kann es sein, dass die Schleife nicht richtig ist?
 
Zuletzt bearbeitet:
bei "Array<T>" steht T für einen bestimmten aber noch unbekannten Typ. Das heißt du legst erst zur Laufzeit fest, für welchen Typ T nun steht. Beispiel:

Java:
Array<String> stringArray = new Array<String>(); // T = String für DIESE INSTANZ
Array<Integer> integerArray = new Array<Intege>(); // T = Integer für DIESE INSTANZ

Weiter ist zu beachten, dass Array eine Klasse ist, die nur (mehr oder weniger) zufällig "Array" heißt. Man könnte sie auch in "Foo" umbenennen. Was ich sagen will: Nur weil die Klasse "Array" heißt, hat noch lange nichts mit den wirklichen Arrays in Java zu tun.

Und um dir wirklich hilfreiche Tipps zu geben, wie du das reserved() jetzt implementieren könntest, müssten wir mal den Rest des Codes von Array sehen. Denn offensichtlich musst du ja einen neue Instanz von Array anlegen. Welche Konstruktoren gibt es denn für diese Klasse?
 
Zuletzt bearbeitet:
Array hat nichts im Konstruktor stehen.

in dem Kommentar steht noch
/**
* Gibt ein Feld zurueck, das die umgekehrte Elementreihenfolge hat. Das
* this-Objekt und seine Atribute werden nicht veraendert!
*
* @return neues umgedrehtes Array

und das eventuel cast (T) benötigt wird.

Das umdrehen der Elemente ist ja kein Problem aber ich habe eine Testklasse und die Meldet dann immer wenn ich This zurück gebe das statt a ein d zurück gekommen ist.
Da stimmt nur eine kleinigkeit nicht : (

Ich komm nicht drauf was.

Wenn ich statt einen neuem Objekt ein neues Array<T> erstelle und das zurück gebe, dann stimmt der zurück gegebene wert aber dann kommt folgender Fehler:

Java:
/**
     * Original von reversed ist nicht veraendert.
     */
    @Test
    public void noModificationWithReverse() {
        fuelleA();
        a.reversed();
        assertEquals("a", a.get(0));
        assertEquals("b", a.get(1));
        assertEquals("c", a.get(2));
        assertEquals("d", a.get(3));
        
    }

hier nochmal der Fehler wenn ich this zurück gebe:

Java:
@Test
    public void testReversed() {
        fuelleA();
        Array<String> r = a.reversed();
        assertEquals("a", r.get(3));
        assertEquals("b", r.get(2));
        assertEquals("c", r.get(1));
        assertEquals("d", r.get(0));
    }
 
Bitte poste mal deinen Code, der eine neue Instanz von "Array" mit umgedrehter Reihenfolge erzeugt. Ich denke daran kann man am schnellsten erkennen, ob (und wenn ja: wo) du einen Fehler hast oder nicht.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben