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.
 

pro2

Bekanntes Mitglied
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.
 
P

pappawinni

Gast
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.
 

TheBeginner

Mitglied
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
 
P

pappawinni

Gast
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:

Kevin94

Top Contributor
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]
 

Landei

Top Contributor
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:

Bitler

Mitglied
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.
 
H

hüteüberhüte

Gast
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:
B

bone2

Gast
[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]
 
H

hüteüberhüte

Gast
Jeder weiß doch was ich meinte ^^ Man muss sich nur kurz überlegen, dass Nachkommastellen nicht dargestellt werden
 

Ähnliche Java Themen

Neue Themen


Oben