Wie generiert man in Java folgende Zahlenfolge?
-1, 2, -3, 4, -5 , 6, ...
5 Antworten
for(int i=1; i<=100; i+=2) {
System.out.println(-i);
System.out.println(i+1);
}
Mit einer Schleife. Man beginne mit -1, und gebe immer die Zahl aus. Wenn die Zahl gerade ist (= durch 2 teilbar), gibt man nicht die Zahl selbst aus, sondern den Betrag (in Java z.B. mittels Math.abs()).
Ich würde denken gerade deswegen nicht. Du meinst vermutlich für hohe i oder? Naja, ich weiß nicht inwieweit der Compiler das optimiert. Ich denke er tut es.
Ich würde sagen, diese hier ist die Informatiker-Lösung und meine ist die Mathematiker-Lösung.
for(int i=1;i<n;i++)
System.out.print((i%2 == 0 ? i : -i)+", ");
for(int i=1;i<n;i++)
System.out.print((i%2 == 0 ? i : -i)+", ");
/*Ich haben hier den bedingten Ausdruck verwendet mit modolu. Wenn jedesmal der i wert modolu 2 gleich 0 ergibt, dann gebe den Wert i aus, sonst den wert -i.
Das in eine Klammer und dann einen Kommentar noch hinzufügen, um die Zahlen von einander zu trennen.*/
For schleife. i inkrementieren und (-1)^i drauf multiplizieren
Ein Problem. (0+1)*-1 =-1 ok (-1+1)*-1 =....
Wenn du i erhöhst und i fest *-1 rechnest hast du ein Problem mit den negativen Zahlen denn -5+1 ist -4 du brauchtest aber -6 (also -5-1) um damit mit *-1 eine 6 zu machen. Für 6 brauchst du dann wieder +1 um daraus mit *-1 die -7 zu machen.
Wenn du *-1 nur für die Ausgabe nutzt musst du auf grade/ungrade prüfen. Wenn du damit i anpasst musst du abwechselnd +1 oder -1 rechnen.
Ich wende eine alternierende Folge an, so wie man es mathematisch machen würde.
a_i=i × (-1)^i
und lasse i von 1 an laufen. Alles passt. Ich nehme ja nicht Mal -1 sondern Mal -1 hoch i.
zwei Schleifen
eine macht +1, die andere +1 *(-1)
Der Fragesteller soll oder will hoffentlich was lernen, da ist es sinnvoll, zu korrigieren.
Ja, das geht auch, aber da braucht man ein If extra.