Arrays zusammenfügen mit abwechselnden Werten

Cryx

Mitglied
Moin und Hallo!

Ich habe ein Problem bei einer Aufgabe und komme nicht wirklich weiter. Wie man zwei Arrays zu einem "macht" habe ich soweit verstanden. Allerdings habe ich bei der Aufgabenstellung ein kleines Problemchen.

Es soll eine Methode zip geschrieben werden. Es soll ein Array zurückgegeben werden mit allen Werten der beiden Arrays. Dabei sollen die Werte immer abwechselnd in das neue Array hineingeschrieben werden. Wenn ein Array mehr Elemente als das andere hat, sollen die übrigen Werte einfach ans Ende hinzugefügt werden.

Also wie oben bereits gesagt, die 2 Arrays habe ich zusammengefügt. Allerdings ohne dem abwechseln der Werte.

Java:
public void zip(){
		int[] a1 = {1,2,3,10,20};
		int[] a2 = {5,7,25};
		 
		// Copy a1 into newA
		int[] newA = Arrays.copyOf(a1, a1.length + a2.length);
		 
		// Copy a2 into newA
		for(int i=0; i < a2.length; i++){
		  newA[a1.length+i] = a2[i];
		}
		 
		System.out.println(Arrays.toString(newA)); //=> [1, 2, 3, 10, 20, 5, 7, 15, 25]
	}

Über eine kleine Hilfe wäre ich überaus dankbar! 🙂
 
Also ich würde das "manuell" machen. Bin mir nicht sicher, ob sowas mit Standardfunktionen so leicht geht.
Hier mal ein kleiner Anfang:

Java:
public int[] zip(){
		int[] a1 = {1,2,3,10,20};
		int[] a2 = {5,7,25};
		int[] newA = new int[a1.length+a2.length];
		
		for(int k=0, i = 0; k<Math.min(a1.length, a2.length); i+=2, k++){
			newA[i]=a1[k];
			newA[i+1]=a2[k];
		}
		System.out.println(Arrays.toString(newA));
                return newA; 
	}

Jetzt musst du noch prüfen, welches Array länger ist und die Werte hinten anhängen 😉
 
Zuletzt bearbeitet:
Okey danke für die Hilfe. Für alle Leute die hier landen. Hier ist mein Lösungsvorschlag.


Java:
int[] a1 = { 1, 2, 3, 10, 20, 50, 454 };
		int[] a2 = { 5, 7, 25 };
		int[] newA = new int[a1.length + a2.length];

		int bigger;
		int smaller;
		if (a1.length > a2.length) {
			bigger = a1.length;
			smaller = a2.length;
		} else {
			smaller = a1.length;
			bigger = a2.length;
		}

		for (int k = 0, i = 0; k < Math.min(bigger, smaller); i += 2, k++) {
			newA[i] = a1[k];
			newA[i + 1] = a2[k];
		}
		for (int i = 1; i <= bigger - smaller; i++) {
			newA[((smaller * 2) + i) - 1] = a1[(smaller + i) - 1];
		}

		System.out.println(Arrays.toString(newA));
	}
 
Das ist nicht ganz zu Ende gedacht.

Dein Program funktioniert nicht, wenn a2 größe als a1 ist. Den Fehler findest du bestimmt selbst?
 

Zurück
Oben