Hi,
Nur das Problem ist, dass es keine Exception gibt wenn im Berechnungsergebnis eine größere Zahl als der erlaubte der deklarierten Variable rauskommt. Es kommen halt komische Ergebnisse raus wie 0 oder negative Zahlen. Das liegt wohl an der Bitverschiebung... oder so...
Wie kann ich nun einen solchen Überlauf der Variable abfangen? Gibt ja keine Exception aus...
1. wenn Du int-Primitive verwendest, wechsle auf den Typ long
2. Zur Vermeidung des "Überlaufs" (in Java gibt es keinen "klassischen Überlauf" - es ist Aufgabe des Programmierers sicherzustellen, dass der Wertebereich des verwendeten Typs für die Werte ausreichend ist) verwende eine Abbruchbedingung für die Iteration/Rekursion mittels Min/Max-Werten:
bei Primitiven vom Typ int -> definiert durch die Konstanten Integer.MIN_VALUE/Integer.MIN_VALUE
bei Primitiven vom Typ long -> definiert durch die Konstanten Long.MIN_VALUE/Long.MIN_VALUE
wenn das alles noch nicht reicht, könntest Du noch auf den Typ BigInteger ausweichen (wird aber langsamer, da intern mit Strings gearbeitet wird)
Viele Grüße,
Martin Jung