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.
Ja ist es. Dein Ansatz bisher ist schonmal sehr gut. Deine Logik ist sauber getrennt von der Präsentation. Das solltest du auch weiterhin genau so beibehalten.
Was jetzt halt noch fehlt ist ein konkreter Ansatz für dein Problem. eventNumberFirst muss jetzt halt das input-array sortieren - oder besser noch: eine sortierte Kopie davon zurückgeben.
@thisisacting Eine recht einfache Lösung wäre, ein neues Array gleicher Größe anzulegen, sich den ersten und letzten Index zu merken, und dann die geraden Elemente nach vorne und die ungeraden nach hinten zu packen (und natürlich dann den jeweiligen Index anzupassen).
public int[] evenNumbersFirst(int[] input) {
int[] output = new int[input.length];
int evenIndex = 0;
int oddIndex = output.length-1;
for(int value : input) {
if (value % 2 == 0) { //gerade
//dieser Teil der Aufgabe bleibt dem Leser überlassen
} else { //ungerade
//dieser auch
}
}
return output;
}
@CyborgBeta Interessante Lösunge (obwohl das mit dem Comparator schon leichter Missbrauch ist), aber denkst du wirklich, es ist eine gute Idee, jemanden der gerade mit Java anfängt, und lernen möchte, wie man mit Arrays arbeitet, Streams und Lambdas um die Ohren zu hauen?
public int[] evenNumbersFirst0(int[] input) {
int[] output = new int[input.length];
int evenIndex = 0;
int oddIndex = output.length - 1;
for (int value : input) {
if (value % 2 == 0) { // gerade
// dieser Teil der Aufgabe bleibt dem Leser überlassen
} else { // ungerade
// dieser auch
}
}
return output;
}
Ich fürchte, wir sind einem Troll aufgesessen, da keine Antwort mehr und die Frage auch in einem anderen Forum gestellt wurde.
Aber allgemein hast du recht.
Das ist aber auch eine interessante Lösung. Aber kann es sein, dass die ungeraden Zahlen auf die Art in umgekehrter Reihenfolge in das Array kommen? Ich würde mir die ungeraden Zahlen rauspicken und mit dem Ergebnis einer nextEven-Methode austauschen, solange dieses Ergebnis nicht <0 ist.
Auf die Art lernt er auch gleich, dass Arrays (bzw. Objekte allgemein) per Referenz übergeben werden.
Okay, bei nochmaligem Überlegen fällt mir auf, dass die ungeraden Zahlen nun vollkommen durcheinander geraten können (oder nicht? Bin mir nicht sicher), aber egal.