Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Aus irgendeinem grund hört mein Programm bei 113382 einfach auf zu laufen, ist euch klar warum?
die schleifendurchgänge sind auf keinen fall erreicht und auch ohne diesen Wert hört das Programm einfach auf...
Kann sich das jemand erklären?
Bei Deinen Berechnungen kommt es zu einem Überlauf der Variable reingeben und in dem Zusammenhang wird die Variable 0.
In dem Moment hast Du eine Art Endlosschleife.
Du kannst das einfach sehen, indem Du einfach noch eine Ausgabe hinzufügst: Nach dem if auf das reingeben gibst Du es immer aus und bei reingeben == 0 brichst Du ab:
[CODE lang="java" highlight="6,7"] if (reingeben%2==1) {
reingeben=3*reingeben+1;
} else {
reingeben=reingeben/2;
}
System.out.println("reingeben: " + reingeben);
if (reingeben == 0) return;[/CODE]
Bei Deinen Berechnungen kommt es zu einem Überlauf der Variable reingeben und in dem Zusammenhang wird die Variable 0.
In dem Moment hast Du eine Art Endlosschleife.
Du kannst das einfach sehen, indem Du einfach noch eine Ausgabe hinzufügst: Nach dem if auf das reingeben gibst Du es immer aus und bei reingeben == 0 brichst Du ab:
[CODE lang="java" highlight="6,7"] if (reingeben%2==1) {
reingeben=3*reingeben+1;
} else {
reingeben=reingeben/2;
}
System.out.println("reingeben: " + reingeben);
if (reingeben == 0) return;[/CODE]
Da ich nicht wirklich verstehe, was Du da machst, kann ich das nicht sagen. Du kannst ggf. den Datentyp verändern. mit long statt int kommt es zumindest nicht so schnell zu einem Überlauf. Wenn long nicht ausreicht, dann hast Du auch noch BigDecimal.
Du könntest einen Check einbauen, ob es zu einem Überlauf gekommen ist (reingeben < 0 ) und den Fall behandeln.
Und evtl. noch etwas mehr Ausgabe einbauen - damit du siehst, dass er noch etwas tut.
Und wenn Du es über die IDE im Debug-Modus startest, dann kannst Du den Lauf jederzeit unterbrechen und schauen, wo er gerade steht.
Da ich nicht wirklich verstehe, was Du da machst, kann ich das nicht sagen. Du kannst ggf. den Datentyp verändern. mit long statt int kommt es zumindest nicht so schnell zu einem Überlauf. Wenn long nicht ausreicht, dann hast Du auch noch BigDecimal.
Du könntest einen Check einbauen, ob es zu einem Überlauf gekommen ist (reingeben < 0 ) und den Fall behandeln.
Und evtl. noch etwas mehr Ausgabe einbauen - damit du siehst, dass er noch etwas tut.
Und wenn Du es über die IDE im Debug-Modus startest, dann kannst Du den Lauf jederzeit unterbrechen und schauen, wo er gerade steht.
Da ich nicht wirklich verstehe, was Du da machst, kann ich das nicht sagen. Du kannst ggf. den Datentyp verändern. mit long statt int kommt es zumindest nicht so schnell zu einem Überlauf. Wenn long nicht ausreicht, dann hast Du auch noch BigDecimal.
Du könntest einen Check einbauen, ob es zu einem Überlauf gekommen ist (reingeben < 0 ) und den Fall behandeln.
Und evtl. noch etwas mehr Ausgabe einbauen - damit du siehst, dass er noch etwas tut.
Und wenn Du es über die IDE im Debug-Modus startest, dann kannst Du den Lauf jederzeit unterbrechen und schauen, wo er gerade steht.
er versucht die Theorie zu wieder legen dass gilt
wenn eine Zahl ungerade ist multipliziert man sie mit 3 und dann +1
wenn sie dann gerade ist / 2
=> die Theorie sagt aus wenn man das durchzieht mit jeder zahl kommt man immer irgendwann bei 4 2 1 auf einen loop
Das sehe ich nicht so. Sobald der Exponent nicht mehr 0 ist, hast du die Einer nicht mehr, d.h. das +1 verändert die Zahl nicht mehr.
Das heisst, du hast eine 53 Bit Ganzzahl, die nicht überläuft (was du gut erkennen kanst) sondern dich einfach ''verarscht'' durch die Ungenauigkeit ... Und mit der Ungenauigkeit ist das Ergebnis schlicht falsch.
Das sehe ich nicht so. Sobald der Exponent nicht mehr 0 ist, hast du die Einer nicht mehr, d.h. das +1 verändert die Zahl nicht mehr.
Das heisst, du hast eine 53 Bit Ganzzahl, die nicht überläuft (was du gut erkennen kanst) sondern dich einfach ''verarscht'' durch die Ungenauigkeit ... Und mit der Ungenauigkeit ist das Ergebnis schlicht falsch.