Java Collatz-Folge

fritzl

Wohlschmecker aus Vierlanden
Registriert
01.06.08
Beiträge
237
hi,
also ich übe seit 1 Woche mit dem Buch "Java ist auch eine Insel" Java Programmierung.
Die Aufgabe ist es eine Collatz-Folge mit n=27 zu erstellen (wenn n gerade ist /2; wenn nicht 3*n+1)

also folgendes:


public class colatz {
public static void main( String[] args) {

int n = 27;
int r = (n%2);

while ( n > 1) {

if ( r == 0) {
n = n /2;
}
else {
n = 3*n+1;
}
System.out.println(n);
}

}
}


dieses Programm gibt folgende Ausgabe :
82
247
742
2227
6682
20047
60142
180427
541282
1623847
4871542
14614627
43843882
131531647
394594942
1183784827
-743612814

dieses jedoch:


public class colatz {
public static void main( String[] args) {

int n = 27;

while ( n > 1) {

if ( n%2 == 0) {
n = n /2;
}
else {
n = 3*n+1;
}
System.out.println(n);
}

}
}


gibt die Richtige undzwar:

82
41
124
62
31
94
47
142
71
214
107
322
161
484
242
121
364
182
91
274
137
412
206
103
310
155
466
233
700
350
175
526
263
790
395
1186
593
1780
890
445
1336
668
334
167
502
251
754
377
1132
566
283
850
425
1276
638
319
958
479
1438
719
2158
1079
3238
1619
4858
2429
7288
3644
1822
911
2734
1367
4102
2051
6154
3077
9232
4616
2308
1154
577
1732
866
433
1300
650
325
976
488
244
122
61
184
92
46
23
70
35
106
53
160
80
40
20
10
5
16
8
4
2
1


wo ist der Unterschied? habe lange dran gefummelt bis ich am 1. Programm was verändert hab das schließlich funktionierte.

Danke!
 

zyklo

Wohlschmecker aus Vierlanden
Registriert
24.10.06
Beiträge
235
Bei deiner ersten Version ist r, also die Entscheidungsvariable immer konstant 1, weil 27%2 = 1.
 

fritzl

Wohlschmecker aus Vierlanden
Registriert
01.06.08
Beiträge
237
AH! vielen Dank. Muss das int r = (n%2); ja nur in die while Schleife schreiben.. und ich dachte ich hätte einen Denkfehler :D