Ein gegebenes Int Array zu Zwei Arrays zurück geben

Hibiskus

Neues Mitglied
Also wir sollen eine Methode, die bei einem gegebenen int -Array zwei Arrays zurückgibt schreiben. Das erste Array enthält nur die geraden und das zweite nur die ungeraden Zahle.
Falls a null ist, sollen zwei leere Arrays zurückgegeben werden.

Ich habe aber keine Ahnung wie ich hier Anfangen soll. Help please
 
Du willst/sollst über ein Array iterieren und jedesmal entscheiden: gerade oder ungerade? Je nach dem sollst du dann das Element in ein anderes Array kopieren.

Eigentlich ganz einfach. 😉
 
Hier mal ein Vorschlag:
Java:
	public static int[][] partitionIntoTwo(int[] x) {
		int[][] a = new int[x.length][2];
		int evens = 0;
		for (int i = 0; i < x.length; i++) {
			if (x[i] % 2 == 0) {
				a[i] = new int[] { 0, x[i] };
				evens++;
			} else {
				a[i] = new int[] { 1, x[i] };
			}
		}
		Arrays.sort(a, (b, c) -> Integer.compare(b[0], c[0]));
		return new int[][] { IntStream.range(0, evens).map(i -> a[i][1]).toArray(),
							 IntStream.range(evens, a.length).map(i -> a[i][1]).toArray() };
	}

	public static void main(String[] args) {
		System.out.println(Arrays.deepToString(partitionIntoTwo(new int[] { 3, 9, 1, 2, 1, 0 })));
	}
 
...wenn Du Dir unsicher bist, wie Du vorgehen sollst, schreibe Dir am besten die einzelnen Schritte auf, die Dir einfallen. Was ist der Output? Woraus besteht er? Bei Arrays: Wo kriege ich die Länge her? Wie ermittle ich die gewünschten Zahlen? Wie frickel ich dann alles zusammen? Dann bau eine Roadmap. Meine sähe so aus: Ich würde zwei separate Arrays erstellen und am Ende zusammenfügen:

Java:
package zweiDArrays;

import java.util.Arrays;

public class ArrayGradeUngerade {

    public static int[][] oneToTwoArrays(int[] array) {

//        Länge der einzelnen Arrays bestimmen

        int lengthEvenArray = 0;
        int lengthOddArray = 0;

        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 0) {
                lengthEvenArray++;
            } else {
                lengthOddArray++;
            }
        }

//        Einzelne Arrays anlegen

        int[] oddArray = new int[lengthOddArray];
        int[] evenArray = new int[lengthEvenArray];

//        Gerade und ungerade Zahlen in den dazugehörigen Arrays speichern. Die Counter
//        helfen den richtigen Index zu finden

        int counterJ = 0;
        int counterK = 0;
        for (int j = 0; j < array.length; j++) {

            if (array[j] % 2 == 0) {
                evenArray[counterJ] = array[j];
                counterJ++;
            } else {
                oddArray[counterK] = array[j];
                counterK++;
            }

        }

//        Beide Arrays zusammenführen und ausgeben

        int[][] newTwoDArray = { evenArray, oddArray };
        return newTwoDArray;

    }

    public static void main(String[] args) {

        int[] testArray = { 1, 2, 3, 4, 5, 6, 7, 23, 48 };
        System.out.println(Arrays.deepToString(oneToTwoArrays(testArray)));

    }

}
Output:
Code:
[[2, 4, 6, 48], [1, 3, 5, 7, 23]]
Das ist aber wahrscheinlich nicht die eleganteste oder kürzeste Lösung.
 

Neue Themen


Zurück
Oben