Frage von maxbax08, 79

Wieso ist das Ergebnis dieser Java-Rechenoperation 0?

Hallo, ich steh grad so ein Bisschen auf dem Schlauch... Wir haben letztens eine Informatik Klausur geschrieben und eine der Aufgaben war es, zu einer Rechenoperation das Ergebnis und dessen Datentyp zu nennen, die Umgebung war Java. Das Problemkind lautet wie folgt: "( 10 / 3 - 3) * 1234567891234", als ergebnis hatte ich irgendwas im 12 Stelligen Bereich und Double als Datentyp. Das ist allerdings Falsch, es käme nämlich "0" raus, ich hab es am Computer getestet und das stimmt auch. Jetzz meine Fragt: Wieso kommt da "0"?

Expertenantwort
von Suboptimierer, Community-Experte für Mathematik, 48

Ich würde bei so etwas immer ".0" hinter ganzen Zahlen schreiben, denn sonst werden die Zahlen wie Integer behandelt und Integer geteilt durch Integer als Integer zurück gegeben. Also z. B. (10.0/3.0 - 3) * 123...

Als Ganzzahl gerechnet entstünde 3,33333 - 3 = 0, weil die Nachkommastellen abgeschnitten werden würden.

Antwort
von ceevee, 44

Ich würd eher sagen, dass der Datentyp "long" ist. 1234567891234 ist für einen Integer viel zu groß. Dann könnte man allerdings auch genauso gut schon fast "float" oder "double" als Datentyp nehmen... die Aufgabe ist mMn. verwirrend, die richtige mathematische Begründung hast du hier ja in den anderen Antworten.

Antwort
von GoimgarDE, 19

Tatsächlich würde das ganze nicht Compilieren da 1234567891234 zu groß für Integer ist aber auch nicht als Double/Long markiert ist.

Die Begründung deines Profs/Lehrers warum 0 raus kommt ist:

( 10 / 3 - 3)  sind alles Integer Werte da nichts andere Ausgewiesen wurde.

In Datentypen gilt:

Integer/Integer = Integer (unter Verlust der Gleitzahlen.)

Also sind wir bei:

3 - 3 was 0 ist.

0*1234567891234 = 0.

Die Frage die sich jetzt noch stellt welcher Datentyp.

Ich denke mal Aufgabe war es jetzt zu erkennen das "1234567891234" als Double markiert sein muss und zu sagen: Integer Operator Long und Long Operator Integer führen zu einer Konvertierung des Integers zu Long. Das Ergebnis ist auch Long obwohl es auch in ein Integer passen würde. Der Prof/Lehrer wird gedacht haben das "Etwa nötige Typ Angaben müssen Sie sich denken." auf Grund der Aufgabenstellung klar ist und nicht mehr als extra Hinweis nötig ist. (Tatsächlich hätte  das ja auch den letzten Schüler/Studenten drauf gestoßen das 1234567891234 wohl zu groß sein wird.)

Antwort
von ralphdieter, 30

ich hab es am Computer getestet und das stimmt auch

Nanu? Bei mir kommt eine Fehlermeldung:

error: integer number too large: 1234567891234

Die "Java® Language Specification" sagt dazu in Kapitel 3.10.1:

It is a compile-time error [...] if a decimal literal of type int is larger than 2147483648 (2³¹).

Kommentar von maxbax08 ,

deshalb Double und nicht Integer

Kommentar von ralphdieter ,

Nur, wenn ein Dezimalpunkt oder 'e' angegeben ist. Auch für long muss zwingend ein 'L' oder 'l' dahinter. Alles andere ist syntaktisch falsch. Dein Prof hätte ebenso gut nach dem Wert von :-P fragen können!

Antwort
von Omnivore08, 36

1. der Typ ist Integer, weil du nur mit Integer rechnest!

2.:

10/3 ist 3 und nicht 3,333333!!!

3-3 ist folglich 0

und 0 mal irgendwas bleibt 0

Das Ergebnis 0 ist folgerichtig und logisch!

Antwort
von CrEdo85, 42

Ohne java zu kennen: datentyp ist integer.
Klammer zuerst: 10/3, wird auf 3 abgerundet, 3-3=0; 0*blablabla=0

Keine passende Antwort gefunden?

Fragen Sie die Community