Neue Array übernimmt Werte des alten nicht

Hallo und guten Abend werte Mitglieder,
habe eine Frage an euch, da mich google seit ungefähr
zwei Stunden echt hängen lässt, und ich einfach nicht weiterkomme.

Die Methode printArray soll die Werte des Arrays wie folgt darstellen:
[1, 2, 3]
Dies tut es auch beim ersten Durchlauf, beim zweiten jedoch nicht mehr,
nachdem die Methode resize aufgerufen wurde.
resize soll die Werte des Ausgangsarrays übernehmen und ein neues
mit doppelt so vielen Werten zurückgeben, welches dann wieder mittels
printArray gezeigt werden soll(im selben Aufbau wie oben).
Nur sieht es diesmal so aus:
[0, 0, 0, 4, 5, 6]
Es fehlen mir also die Zahlen aus dem Ursprungsarray.

Hier erstmal der Code und dann meine Vermutung, wo das Problem liegen könnte.
Java:
public class Resize {

	public static void main(String[] args) {
		int[] array = {1, 2, 3};
		printArray(array);
			array = resize(array);
			array[3] = 4;
			array[4] = 5;
 			array[5] = 6;
			printArray(array);
	}

	public static int[] resize(int[] a) {
		a = new int[(a.length*2)];
		return a;
	}

	public static void printArray(int[] a) {
		Out.print("[");
		
		for(int i=0; i < a.length; i++) 
			if (i + 1 > a.length - 1)
				Out.print(a[i]);
			else Out.print(a[i]+" ,");
		
		Out.println("]");
	}
}

Ich vermute, dass in meiner Methode resize die alten Werte nicht eingelesen werden,
aber eigentlich sollten die ja der Methode mitgegegeben worden sein als diese aufgerufen worden ist.

Ich würde mich über einen Tipp oder einen Ansatz freuen.

Gruß und Danke
 
Java:
    public static int[] resize(int[] a) {
        a = new int[(a.length*2)];
        return a;
    }

Du scheinst da nicht ganz zu verstehen, was passiert, Du übergibst eine Variable a vom Typ int-array.
Dann weißt du a ein neues Array (leer) zu, welches doppelt so lang ist, wie a.
In keinem Schritt schreibst du irgendwelche werte in dein neues Array.
Das musst du schon noch machen.
 
Habe das mal versucht und es gibt das richtige am Bildschirm aus.

Java:
public static int[] resize(int[] a) {
		a = new int[(a.length*2)];
		a[0] = 1;
		a[1] = 2;
		a[2] = 3;
		return a;
	}

Muss ich das extra mit angeben, also, gibt es keine
Möglichkeit, dass in der Methode resize automatisch die Werte
von einem alten Array übernommen werden können?

Danke für die Hilfe. 🙂
Gruß
 
Nein, wenn du eine neue größe haben möchtest, musst du dies selber machen.

Würde dann so aussehen:

Java:
public static int[] resize(int[] a) {
		int[] newValues = new int[a.length * 2];
		for (int i = 0; i < a.length; i++) {
			newValues[i] = a[i];
		}
		return newValues;
	}
 
Arrays sind ziemlich "dumm" - dafür aber auch sehr einfach zu handhaben.

Wenn du dynamische Vergrößerung möchtest, musst du dir selber was bauen (wie das Beispiel oben, eine Methode, die dir die Arrays vergrößert) oder dich mit Listen und Collections beschäftigen

ArrayList<> ist da ein Beispiel
 
Danke nochmal, habe es jetzt verstanden.
Problematisch ist halt auch manchmal, dass
ich Java erst seit ein paar Wochen lerne,
und wenn man dann nach Hilfe im Internet sucht
wird man von irgendwelchen Funktionen und Sonderklassen
überrant, obwohl man es vielleicht nur mit "Anfänger"- bzw.
"Grundtechniken" machen möchte, da man das andere
ja noch nicht kann. Arbeite ja mit dem Buch
"Sprechen sie Java" und muss sagen, oft lässt mich das
ganz schön im Stich.


Nun ja, Thema hat sich erledigt, Danke für eure Zeit und Mühe.
Gruß
 

Zurück
Oben