Rechenfehler ?

TheBeginner

Mitglied
Hallo Zusammen,

ich habe 2. Bsp. und ich weiß nicht genau, wieso beide zu verschieden Ergebnissen führen.

Also :
Java:
1.//Division.java
2.public class Division{
3. public static void main(String[] args){
4. int x = 2;
5. int y = 4;
6. double z = x / y;
7. System.out.println(x + " / " + y + " = " + z); //A1
8. }
9.}
Ausgabe an Stelle A1: 2 / 4 = 0.0

Als Kommentar steht in meinen Unterlagen :

Mehrschrittige Arbeitsweise:
1.Ganzzahlige Division (erst)
2.Variablen-Zuweisung (dann)




Bsp.2 Etwas umgeändert:
Java:
1.//Division.java
2.public class Division{
3. public static void main(String[] args){
4. int x = 2;
5. double y = 4;
6. double z = x / y;
7. System.out.println(x + " / " + y + " = " + z); //A1      Frage: Hier wird sozusagen der Variabe x/y der Wert von z zugeordnet, oder ??
8. }
9.}

Ausgabe an Stelle A1: 2 / 4 = 0.5

Kommentar:
Mehrschrittige Arbeitsweise:
1. Division reeller Zahlen (erst)
2. Variablen-Zuweisung (dann)


Ich verstehe leider auch nicht was mit beiden Kommentaren gemeint soll.
Voll Komisch. Bitte um logische Erklärung. Will sowas nicht auswendig lernen, wenn man es verstehen kann.

Danke im Voraus.
 
KillerBlauLog: Nice To Know: Division in Java

Generell gilt immer: Mindestens eine von beiden Zahlen muss ein Double sein, damit hinten auch ein Double rauskommen kann! Ansonsten wird immer abgerundet.
Daher ist 1 / 2 = 0; aber 1 / 2.0 = 0.5! Weil 2.0 ja ein Double ist.

Frage: Hier wird sozusagen der Variabe x/y der Wert von z zugeordnet, oder ??

Nein, da wird gar nichts zugeordnet. Da wird nur ausgegeben.
 
7. System.out.println(x + " / " + y + " = " + z); //A1 Frage: Hier wird sozusagen der Variabe x/y der Wert von z zugeordnet, oder ??

Hier wird garnichts zugeordnet, sondern lediglich etwas ausgegeben, nämlich ein Text, der aus dem Inhalt der Variablen x, y und z sowie den festen Zeichenketten (Literalen) " / ", " =" zusammengesetzt wird.
 
Ich habe das leider noch immer nicht verstanden


System.out.println(x + " / " + y + " = " + z);

es wird z ausgegebn ?


Was ist der Unterschied zu :


System.out.println( x / y = z); Das wäre eine Zuweisung ???

Bin jetzt was durcheinander
 
Die Frage sollte sich eigentlich nicht stellen, das gibt nämlich nur nen Syntax-Error

x / y = z

ist ein ungültiger Ausdruck.
Wenn du

x / y == z

schreibst, dann wäre das ein gültiger boolscher Ausdruck und würde wohl false oder true liefern.
 
Zuletzt bearbeitet von einem Moderator:
Nein das wäre ein Kompilerfehler: Man kann einer Rechnung keinen Wert zuweisen. Bei einer Zuweisung muss links immer eine Variable stehen und rechts kann ein beliebiger Ausdruck stehen.
Und der Unterschied is das beim ersten
Code:
2/4=0.5
und beim zweiten (also korrigiert: System.out.println(z=x/y)😉 nur
Code:
0.5
ausgegeben wird (und die Rechnung nochmal ausgeführt wird).

[EDIT]Ja, der Wert wäre 0[/EDIT]
 
4. int x = 2;
5. double y = 4;
6. int z = x / y;



Wäre der Wert nun von z : 0 ???

Nein, obiger Code wäre falsch. Bei x / y ist ein double beteiligt, wodurch der gesamte Ausdruck ein double (und zwar 0.5) wird, den man ohne Typumwandlung nicht einem int zuweisen kann.

Aber warum probierst du das nicht einfach aus? Wie lange hast du Trockenschwimmen gemacht, bevor du ins Wasser gehüpft bist?
 
Zuletzt bearbeitet:
In dieser Zeile
System.out.println(x + " / " + y + " = " + z);
wird nicht allein der Wert von z ausgegeben!
Die Konsole wird dir folgendes liefern:
2 / 4 = 0.5
Alles was in "" steht, wird als String gelesen bzw ausgegeben. Der Rest, in diesem Fall Variabelnamen(x,y,z), werden als Integer/Double ausgegeben..
Ich hoffe ich konnte das einigermaßen erklären.
 
Die Rechenoperationen funktionieren immer nur mit zwei gleichen Datentypen. Wenn ein Datentyp "kleiner" ist, wird er vorher auf den größeren gebracht. Beim expliziten Casten nach int und bei der int-Division wird immer abgerundet (oder bei einem anderen Ganzzahltyp). Das andere ist wie gesagt ein String-Literal bzw. Stringkonkatenation

Aber zum Einen könntest du das selbst ausprobieren, zum Anderen steht das in jedem dicken Buch als Einleitung 🙂
 
Zuletzt bearbeitet von einem Moderator:
[TIPP]java rundet nicht ab, java schneidet ab

Java:
        System.out.println(37/10); // 3
        System.out.println(-37/10); // -3
        System.out.println(Math.floor(-37.0/10)); // -4
[/TIPP]
 
Jeder weiß doch was ich meinte ^^ Man muss sich nur kurz überlegen, dass Nachkommastellen nicht dargestellt werden
 

Zurück
Oben