Fehler beim verlängern des Arrays

WinterWyvern

Neues Mitglied
Hallo!

Ich sitze gerade daran, an ein String Array ein Objekt anzuhängen.
Das ganze wollte ich mit hilfe eines Temporären Arrays machen, welches das alte am Ende der Schleife ersetzen sollte.
Hier der Code:

Java:
String[] tempArray = new String[mainArray.length + 1];
            for (int x = 0; x <= mainArray.length; x++){
                tempArray[x] = mainArray [x];
            }
            tempArray[tempArray.length-1] = textField.getText();
            mainArray = tempArray;

Ich bekomme in der dritten Zeile eine out of bounds exception.
Das mainArray wurde vorher mit 0 initialisiert. Mit einem längeren Array funktioniert es aber auch nicht, das wurde bereits getestet.

Ich schätze mal, das wird wieder so ein richtig dummer fehler sein, den ich nur nicht sehe, weil ich die ganze Zeit auf den Code starre...

Vielen Dank für eure Hilfe!
 
Du läufst in der for-Schleife einen Schritt zu weit.
Im letzten Schritt versuschst du auf "mainArray [mainArray.lengt];" zuzugreifen, da knallt's dann.
 
Was Du da machst sollte man aber niemals wirklich tun. Man verlängert keine statischen Arrays auf diese Weise. Das ist unglaublich speicherfressend und langsam.

Wenn Dein Array keine statische Größe hat, dann benutze eine Liste.

Gruß

Claus
 
Was Du da machst sollte man aber niemals wirklich tun. Man verlängert keine statischen Arrays auf diese Weise. Das ist unglaublich speicherfressend und langsam.
Wenn Dein Array keine statische Größe hat, dann benutze eine Liste.

Wobei man erwähnen muss das eine ArrayList intern auch nur ein (Object) Array verwendet 😉
 
Aus dem JDK:
Java:
 private transient Object[] elementData;

Java:
/**
     * Increases the capacity to ensure that it can hold at least the
     * number of elements specified by the minimum capacity argument.
     *
     * @param minCapacity the desired minimum capacity
     */
    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

Default ist das Array übrigens 10 lang.

Oder war das Sarkasmus den ich nicht verstanden habe...?
 
Zuletzt bearbeitet:

Zurück
Oben