Java: Bei einem Bestellwert unter 200€ soll 5.50 Euro Porto berechnet werden. Kann mir einer sagen warum mein Java Programm immer 1005.5€ draus macht?

4 Antworten

Java + Operator ist eine String Zusammensetzung (falls einer der beiden Operanden bereits ein String ist): 

String + String → String

String + int → String

int + String → String

int + int -> int

Du machst folgendes:

String + int + int

Java klammert von links nach rechts:

String + int + int = (String + int) + int → (String) + int → String + int → String

Es findet bei Dir keine Addition statt, sondern nur eine String-Zusammensetzung. 

Lösung wurde bereits gegeben:

String + (int + int)

mit Klammern erzwingen.


Siehe auch hier:

http://www.santis-training.ch/training/java/pitfalls.php

System.out.println("Ihr Rechnungsbetrag betraegt: "  + (wert + porto));

So wäre es richtig. Durch die zwei +-Zeichen, die du (warum auch immer) bei dir drin hast, denkt Java, dass wert und porto strings sind und pappt die einfach aneinander.

MJH1998 
Fragesteller
 22.06.2016, 23:01

Ja so hats geklappt. Ich bin gerade am Anfang und verstehe noch nicht ganz, wie das dann immer mit den Plus + Zeichen funktioniert, aber danke!

Und warum genau muss jetzt das Plus vor die Klammer? Also was sagt das aus?

0
ceevee  22.06.2016, 23:07
@MJH1998

Ich würd in der Ausgabe überhaupt nicht rumrechnen, in deinem Beispiel könnte man also auch einfach


double rechnungswert = wert + 5.5;
System.out.println("Ihr Rechnungsbetrag betraegt: " + rechnungswert);


schreiben, vielleicht wird das dann schon ein bisschen klarer. Das "+" (und zwar immer nur eins) machst du bei der Ausgabe dann, wenn der String zuende ist (also nach dem ") und du die Variable als nächstes einfügst. Bzw. auch, wenn die Variable zuende ist, dann kommt wieder ein "+" und dann ein ".  Und dann geht der nächste String weiter. Zum Beispiel:

System.out.println("Ihr Rechnungsbetrag betraegt: "  + rechnungswert + " Euro");


1
triopasi  22.06.2016, 23:08

Ohne Klammern rechnet java von links nach rechts. Das erste is n string, dann sie Zahl 200, die in einen String konvertiert wird und dann einfach angehängt. Selbiges wieder mit nächster Zahl. Bei Klammern macht er die Klammer zu erst - da da Zahl+Zahl steht, werden die zahlen numerisch addiert und dann an den String angehängt. Das sind 2 verschiedene "Pluszeichen" sozusagen.

4
MJH1998 
Fragesteller
 22.06.2016, 23:12
@triopasi

Ok danke. Das hat mir echt sehr geholfen. Vielen Dank!

0

Habe in Java noch nie mit der Konsole gearbeitet, aber wenn der Rest stimmt, dann hast du mit der Reihenfolge etwas falsch gemacht. Zuerst deklarierst du mal die Variablen. Aber anschliessend willst du beim Rechnungsbetrag den Wert mit Porto setzen, obwohl Wert noch nicht bekannt ist.

Setze die beiden Double unterhalb von 

wert = s.nextInt();

und es sollte anschliessend funktionieren. Wie gesagt, hab noch nie mit der Konsole gearbeitet. Somit könnte es auch woanders Fehler haben.

Warum hast du da wert + + porto? Wenn dann "..." + (wert + porto) wenn ich mich nicht irre aber mit Java habe ich jetzt nicht so viel zu tun. btw. Den Rechnungsbetrag kannst du auch mit wert + porto berechnen und musst dann nicht 5.50 verwenden.

Woher ich das weiß:Berufserfahrung – Softwareentwicklung
MJH1998 
Fragesteller
 22.06.2016, 22:57

Meinst du so: 

else {
System.out.println("Ihr Rechnungsbetrag beträgt: " " + (wert + porto));

0
G0lD3Nc0Ld  22.06.2016, 23:01

ne else { System.out.printIn("Ihr..." + (wert + porto));} wenn du wert und porto zusammenrechnen willst

1