For-Schleife und Ungerade/Gerade Zahlen?
Wir hatten als Aufgabe, die Zahlenabfolge 1, -2, 3, -4, 5, -6 zu kriegen, indem wir ein Programm schreiben, dass mithilfe der For-Schleife das Programm so oft wiederholt, bis diese Zahlenabfolge angezeigt wird. Ich habe es schon versucht:
// Application wiederholung3_for.java
public class Wiederholung3_for {
public static void main (String [] arguments){
// Wiederholung mit der For-Schleife
for (int zahl=1;zahl>-7;zahl=zahl+1){
//if-else
if (zahl % 2 == 0){
System.out.println(zahl=0-zahl);
}
else {
System.out.println(zahl);
}
}
}
}
Kann mir jemand weiterhelfen?
3 Antworten
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
Einfach von 1 bis 6 zählen und wenn gerade, dann ein Minus davor ausgeben.
for (int i = 1; i < 7; i++) {
if (i%2 == 0) System.out.println(-i);
else System.out.println(i);
}
Mithilfe von Ternary Operator oder Mathematik geht's noch kürzer:
// Using ternary:
for (int i = 1; i < 7; i++) {
System.out.println(i%2 == 0 ? -i : i);
}
// Using math:
for (int i = 1; i < 7; i++) {
System.out.println(i * (i%2*2-1));
}
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
![](https://images.gutefrage.net/media/user/Tim3674/1663795677478_nmmslarge__180_0_400_400_16d430ef4e7614776c4ee4140505372f.jpg?v=1663795678000)
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
Der einzige Fehler, den du hattest, war, dass du den Wert zahl zugewiesen hast. Du willst bei der Ausgabe ja nicht zahl verändern, sondern nur 0 - zahl ausgeben. Das hätte perfekt funktioniert, dass man auch einfach nur -zahl statt 0 - zahl in Java schreiben kann, ist ein Sonderfeature, das konntest du nicht wissen. Der Ternary-operator ist eigentlich wie if-else, nur dass er ein Ergebnis hat und nicht nur etwas tut:
boolean wennDasGilt = false;
int dannDieserWert = 3;
int sonstDieserWert = 5;
int einWert = wennDasGilt ? dannDieserWert : sonstDieserWert;
System.out.println(einWert); // 5
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
Das Einzige, was hier nicht richtig aussieht, ist - soweit ich sehe - die Abbruchbedingung der Schleife. Die ist nämlich immer erfüllt.
Setz statt -7 ein paar positive Zahlen ein und schau, was passiert.
(Natürlich kann man das Problem kürzer und "eleganter" lösen, aber darum kann man sich kümmern, wenn du die Grundlagen beherrschst.)
![](https://images.gutefrage.net/media/user/Tim3674/1663795677478_nmmslarge__180_0_400_400_16d430ef4e7614776c4ee4140505372f.jpg?v=1663795678000)
![](https://images.gutefrage.net/media/user/xxxcyberxxx/1691185806883_nmmslarge__0_0_1230_1230_4dfa4fbf5df5051b1dd22ccc1781adca.png?v=1691185807000)
Kann mir jemand weiterhelfen?
Mach es doch einfacher: Im Schleifenkopf lässt du von 1 bis (inklusive) +6 zählen ... Also 6 Mal ...
Im Körper gibst du dann den positiven oder negativen Wert aus, abhängig davon, ob es eine gerade oder ungerade Zahl ist
![](https://images.gutefrage.net/media/user/Tim3674/1663795677478_nmmslarge__180_0_400_400_16d430ef4e7614776c4ee4140505372f.jpg?v=1663795678000)
Zwar kann es sein, dass der Compiler i%2*2-1 inzwischen selbständig optimieren kann (ist sogar wahrscheinlich), aber ich bin gewöhnt, bei so was Terme wie ((i&2)<<1)-1 zu verwenden - Gewohnheit aus alter Zeit.