Frage von hdhdhddedede, 32

warum rechnet java nicht zsammenhängend?

Variabeln:

int x = 243; int compledeWidthX = 1024; float camWidth = 500;

Zusammenhängendes Beispiel(geht nicht)

float mx = x/ compledeWidthX*camWidth;

getrennt(das geht)

float mx = x; x /= compledeWidthX; x*= camWidth;

beim ersten ist x 0(falsches ergebniss) beim 2. 118.65... (richtiges ergebniss)

das ist mur das vereinfachte beispiel eigendlich ist dir trchnung in einer funktion und x wird als parameter übergeben

Antwort
von 1frozenice1, 19

Bei deinen zusammenhängenden Beispiel läuft das in etwa so ab:
x / compledeWidthX  -> 243 / 1024 -> 0  (beide Zahlen sind int, also ist das Zwischenergebnis auch ein int)

 *camWidth; -> 0 * 500 -> 0

Du musst einfach ein int zu einem float casten damit Java das Komma anteil nicht abschneidet. 

float mx = (float)x/ (float)compledeWidthX*camWidth;

Antwort
von Deivil, 16

wie adenosi schon sagte. wird an den datentypen liegen. was passiert, wenn du jede variable als float deklarierst?

Antwort
von adenosi, 20

Das liegt wahrscheinlich daran dass du Integer und Float mischt.

Antwort
von Gomze, 16

1. Integer nur mit Integer, Float nur mit Float

2. Punkt vor Strich gibt es nicht, Klammerrechnung schon also benutz diese

Kommentar von SirNik ,

Punkt 2 ist falsch. Es gibt Punkt-vor-Strich in Java

Kommentar von Gomze ,

Ja genau indem du ein eigenes System schreibst. Wenn du z.B.

int zahl1 = 1;
int zahl2 = 2;
int zahl3 = 3;

zahl1 + zahl2 * zahl3;

rechnest, wird erst zahl1 mit zahl2 addiert

Kommentar von SirNik ,

nein, wird es nicht. Es gibt eine Prioritätstabelle von Operatoren. ein * (mal) hat eine höhere Priorität von binären Operatoren, als ein + (plus). somit wird bei (z1+z2*z3) zuerst z2 mit z3 multipliziert und anschließend z1 addiert.

Kommentar von Gomze ,

Getestet Java 8 IDE Eclipse. Links nach rechts

Keine passende Antwort gefunden?

Fragen Sie die Community