Java Int-Array, Zahlen sortieren

Hallo. Ich bin gerade dabei, mir Java anzueignen. Dabei komme ich gerade leider nicht weiter.
Kann mir jemand helfen?

Mein Code bisher:

public class EvenNumbersFirst {
public static void main(String[] args) {
EvenNumbersFirst enf = new EvenNumbersFirst();
int[] numbers = {3, 2, 1, 9, 6, 5, 4, 7, 8};
int[] result = enf.evenNumbersFirst(numbers);

System.out.println("Als Parameter übergeben:");
for (int i : numbers) System.out.print(i + " ");

System.out.println("\nRückgabe:");
for (int i : result) System.out.print(i + " ");
}
public int[] evenNumbersFirst(int[] input) {
return input;
}
}


Nun wollte ich bei "public int[] evenNumbersFirst(int[] input)" festlegen, dass die oben eingegebenen Zahlen in anderer Reihenfolge ausgegeben werden. ERST die geraden Zahlen, DANN die ungeraden Zahlen. Ist das mit meinem Ansatz möglich?
Es sollte also 2, 6, 4, 8, 7, 5, 9, 1, 3 ausgegeben werden.
Kann mir jemand ein Beispiel für einen Algorithmus dafür schreiben?

Danke im Voraus! 🙂
 
Kann mir jemand ein Beispiel für einen Algorithmus dafür schreiben?
Klar (unter der Annahme, dass es richtig ist, dass die ungeraden Zahlen in umgekehrter Reihenfolge ausgegeben werden sollen, wie es in deinem Beispiel der Fall ist):
Java:
import static java.util.stream.IntStream.*;
public class EvenNumbersFirst {
  public static int[] evenFirstAndOddReversed(int[] numbers) {
    return concat(
      of(numbers).filter(i->(i&1)==0),
      range(0, numbers.length).
      map(i -> numbers[numbers.length - i - 1]).
      filter(i->(i&1)==1))
    .toArray();
  }
  public static void main(String[] args) {
    System.out.println(
        java.util.Arrays.toString(
            evenFirstAndOddReversed(
                new int[] { 3, 2, 1, 9, 6, 5, 4, 7, 8 }
    )));
  }
}
 
Code bitte in Code-Tags setzen: Die drei Punkte rechts vom Smiley - Code - Java
Java:
public class EvenNumbersFirst {

    public static void main(String[] args) {

        EvenNumbersFirst enf = new EvenNumbersFirst();
        int[] numbers = {3, 2, 1, 9, 6, 5, 4, 7, 8};
        int[] result = enf.evenNumbersFirst(numbers);

        System.out.println("Als Parameter übergeben:");
        for (int i : numbers)
            System.out.print(i + " ");

        System.out.println("\nRückgabe:");
        for (int i : result)
            System.out.print(i + " ");
    }

    public int[] evenNumbersFirst(int[] input) {
        return input;
    }
}

Kann mir jemand ein Beispiel für einen Algorithmus dafür schreiben?

Können ja, aber besser ist es, du machst dir selbst ein paar Gedanken dazu. Am besten erst mal ohne Code, wie würdest du vorgehen, wenn du die Zahlen z.B. einfach mit einem Stift auf dem Papier schreiben sollst?
 
Klar (unter der Annahme, dass es richtig ist, dass die ungeraden Zahlen in umgekehrter Reihenfolge ausgegeben werden sollen, wie es in deinem Beispiel der Fall ist):
Java:
import static java.util.stream.IntStream.*;
public class EvenNumbersFirst {
  public static int[] evenFirstAndOddReversed(int[] numbers) {
    return concat(
      of(numbers).filter(i->(i&1)==0),
      range(0, numbers.length).
      map(i -> numbers[numbers.length - i - 1]).
      filter(i->(i&1)==1))
    .toArray();
  }
  public static void main(String[] args) {
    System.out.println(
        java.util.Arrays.toString(
            evenFirstAndOddReversed(
                new int[] { 3, 2, 1, 9, 6, 5, 4, 7, 8 }
    )));
  }
}
Ja genau, so meinte ich das.
 
Zuletzt bearbeitet:
Ich suche eine Möglichkeit. Es gibt sicherlich viele Ansätze, jedoch suche ich den leichtesten.
Falls Du keine Stream Lösung suchst. Ist effizenter und leichter zu lesen.
Java:
public static int[] evenFirstAndOddReversed(int[] numbers) {
        int len = numbers.length;
        int[] num = new int[len];
        int idEven = 0;
        int idOdd = len - 1;
        for (int i = 0; i < len; i++)
            num[(numbers[i] & 1) == 0 ? idEven++ : idOdd--] = numbers[i];
        return num;
    }
 

Zurück
Oben