fibonacci - do while Statement Logik Fehler

Phil_Smith

Mitglied
Hallo Zusammen
Ich versuche gerade in Java ein kleines fibonacci Programm zu schreiben und komme dabei mit meinem do while Statement nicht weiter. Das Problem ist, dass die do While Schlaufe spätestens aufhören sollte, wenn der maximale Long Wert überschritten/erreicht wird, das tut es aber nicht. Was ist an meiner do while Bedingung falsch?

Java:
import java.util.Scanner;

public class fibonacci {

	public static void main(String[] args) {
		
		int input;
		long zahl1 = 0;
		long zahl2 = 1;
		int wiederholung = 0;
		long ergebnis = 0;
		
		Scanner in = new Scanner (System.in);
		
		System.out.print("Geben Sie eine positive ganzzahlige Zahl ein: ");  
		input = in.nextInt();
		System.out.println("Sie haben " + input + "eingegeben.");
		do {
			if (wiederholung == 0) {
				System.out.println("Ergebnis: " + zahl1);
				System.out.println("Ergebnis: " + zahl2);
			} else {
				ergebnis = zahl1 + zahl2;
				System.out.println("Ergebnis: " + ergebnis);
				zahl1 = zahl2;
				zahl2 = ergebnis;
			}
			wiederholung++;
			System.out.println("Wiederholung Nummer: " + wiederholung);
		} 
		while ((wiederholung < input) && (ergebnis <= Long.MAX_VALUE));
		
		in.close();
	}
}
Warum wird meine do while Schlaufe nicht beendet sobald das "ergebnis" grösser als "Long.MAX_VALUE" ist?
Interessant ist vor allem, die Wiederholung Nummer 93:

HTML:
Wiederholung Nummer: 90
Ergebnis: 4660046610375530309
Wiederholung Nummer: 91
Ergebnis: 7540113804746346429
Wiederholung Nummer: 92
Ergebnis: -6246583658587674878
Wäre sehr dankbar über eine hilfreiche Antwort.

Vielen Dank.

Gruss Phil
 

njans

Top Contributor
Der Long hat 64bit Größe. 63 sind davon für die Zahl, 1 Bit für das Vorzeichen. Wenn eine Zahl zu groß wird, dann springt das Vorzeichen um. Mit ergebnis <= Long.MAX_VALUE kannst du nicht prüfen, ob der Wert über die maximale Größe geht, da du in diesem Fall wieder im negativen Bereich landest.
Überhaupt, wie stellst du dir vor, dass du prüfst, ob eine Zahl größer als ihr Wertebereich ist? MAX_VALUE ist der maximale positive Wert eines Longs. Somit kann Long keine größere Zahl annehmen.
 

Gucky

Top Contributor
Das Ganze wird abgebrochen, wenn ergebnis größer ist, als Long.MAX_VALUE aber ein long kann keinen größeren Wert, als Long.MAX_VALUE beinhalten. Das ist ja gerade die Aufgabe dieser Konstante. ;)
Und, selbst wenn es doch funktionieren würde (zahl1 usw. wären double) dann würdest du es erst nach der Addition überprüfen. Das heißt, du würdest den Fehler begehen und dann prüfen, ob du einen Fehler gemacht hast und nicht andersrum.

Die Differenz von zahl1 zu Long.MAX_VALUE muss größer oder gleich zahl2 sein. Dann gibt es keinen Overflow. Also (Long.MAX_VALUE - zahl1) >= zahl2
 

Phil_Smith

Mitglied
Vielen Dank für eure Antworten.. Ja, klar im Nachhinein ergibt es Sinn, dass man ein long nicht auf dessen maximalen Wertebereich prüfen kann, wenn man diesen bereits überschritten hat :bloed:.. Mein korrigierter Code sieht nun wie gefolgt aus:
Java:
import java.util.Scanner;

public class fibonacci {

	public static void main(String[] args) {
		
		int input;
		long zahl1 = 0;
		long zahl2 = 1;
		int wiederholung = 0;
		long ergebnis = 0;
		
		Scanner in = new Scanner (System.in);
		
		System.out.print("Geben Sie eine positive ganzzahlige Zahl ein: ");  
		input = in.nextInt();
		System.out.println("Sie haben " + input + "eingegeben.");
		do {
			if (wiederholung == 0) {
				System.out.println("Ergebnis: " + zahl1);
				System.out.println("Ergebnis: " + zahl2);
			} else {
				ergebnis = zahl1 + zahl2;
				System.out.println("Ergebnis: " + ergebnis);
				zahl1 = zahl2;
				zahl2 = ergebnis;
			}
			wiederholung++;
			System.out.println("Wiederholung Nummer: " + wiederholung);
		} 
		while ((wiederholung < input) && ((Long.MAX_VALUE - zahl1) >= zahl2));
		
		in.close();
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Fibonacci-Folge mit while-Schleife Java Basics - Anfänger-Themen 4
S Abwandlung der Fibonacci Folge Java Basics - Anfänger-Themen 3
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
123456789sssssaaaa Which is the best way to Print Fibonacci Series in Java? Java Basics - Anfänger-Themen 3
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
J Fibonacci-Reihe Java Basics - Anfänger-Themen 12
G Fibonacci Zahlenreihe Fehler Java Basics - Anfänger-Themen 4
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
V Fibonacci Folge Java Basics - Anfänger-Themen 4
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
A Fibonacci Zahlen Java Basics - Anfänger-Themen 1
M Methoden Fibonacci-Folge Java Basics - Anfänger-Themen 6
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
P Fibonacci -Verallgemeintert Java Basics - Anfänger-Themen 2
K Methoden Fibonacci in Array mit rekursiver Methoden Java Basics - Anfänger-Themen 19
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Fibonacci Zahlen Java Basics - Anfänger-Themen 3
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
A Fibonacci-numbers Java Basics - Anfänger-Themen 9
K Rekursion Fibonacci Java Basics - Anfänger-Themen 3
J Fibonacci Zahlen berechnen Java Basics - Anfänger-Themen 3
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
Z Fibonacci Array Erklärung Java Basics - Anfänger-Themen 5
A Gerade Terme der Fibonacci-Folge aufsummieren Java Basics - Anfänger-Themen 12
M Fibonacci, Fakultaet, GGT Java Basics - Anfänger-Themen 9
C Fibonacci Zahlen Java Basics - Anfänger-Themen 7
J Ausgabe der fibonacci Zahlen Java Basics - Anfänger-Themen 4
S Fibonacci Folge Java Basics - Anfänger-Themen 34
D Fibonacci Java Basics - Anfänger-Themen 11
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
W Fibonacci Zahlenberechnung Java Basics - Anfänger-Themen 9
X Fibonacci mit durchschnittlicher Zeit Java Basics - Anfänger-Themen 5
I Fibonacci-Folge , direkter Weg. Java Basics - Anfänger-Themen 5
G Fibonacci Algorithmus Java Basics - Anfänger-Themen 22
0 Fibonacci Zahlen seeeehr schnell berechnen Java Basics - Anfänger-Themen 9
S Fibonacci Rückrechnung! Java Basics - Anfänger-Themen 5
K Fibonacci Zahlen Java Basics - Anfänger-Themen 2
K Programmieren von den ersten 70 Fibonacci-Zahlen Java Basics - Anfänger-Themen 2
G fibonacci was stimmt an meinem code nicht? Java Basics - Anfänger-Themen 2
S Fibonacci Zahlenvergeich Java Basics - Anfänger-Themen 6
G Iterativer Algorithmus zur Berechnung der Fibonacci Zahlen Java Basics - Anfänger-Themen 1
P Fibonacci-Zahlen Java Basics - Anfänger-Themen 6
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
S Erste Schritte While Schleifen Java Basics - Anfänger-Themen 11
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
Say do-while Syntak Java Basics - Anfänger-Themen 3
A Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
W Wiederkehrende Konsolen-Anzeige mit do-While?! Java Basics - Anfänger-Themen 33
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
java-starter Erste Schritte Mit While Schleifen Programme schreiben Java Basics - Anfänger-Themen 4
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
D Array mit while-schleife Java Basics - Anfänger-Themen 12
B do while Schleife Java Basics - Anfänger-Themen 3
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
SergioCK Do while Schleife wiederholen Java Basics - Anfänger-Themen 14
Informatikf Methoden While Schleife Java Basics - Anfänger-Themen 3
M While Schleife? Java Basics - Anfänger-Themen 4
C Sind die while-Schleifen richtig in for-Schleifen ersetzt worden? Java Basics - Anfänger-Themen 8
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
Aeon Erste Schritte Preise berechnen mit do-while Java Basics - Anfänger-Themen 9
J for /while Schleife Java Basics - Anfänger-Themen 5
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
M While-Schleifen-Fehler Java Basics - Anfänger-Themen 4
S Do-While-Schleife Java Basics - Anfänger-Themen 2
S While Schleife Java Basics - Anfänger-Themen 4
S Do-While Schleife Java Basics - Anfänger-Themen 6
J Von While zu for Java Basics - Anfänger-Themen 42
G While/If Programm Java Basics - Anfänger-Themen 2
L String in Do-While-Schleife Abbruchkriterium Java Basics - Anfänger-Themen 1
CptK Methoden While-Schleife so lange ausführen, wie Methode etwas zurückgibt Java Basics - Anfänger-Themen 2
G Flussdiagramm-Do while Java Basics - Anfänger-Themen 4
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
B Verschachtelung von For-Schleife in While Schleife Java Basics - Anfänger-Themen 14
G while schleife Java Basics - Anfänger-Themen 11
G while schleife mit array Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben