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?

... komplette Frage anzeigen

5 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

Antwort bewerten Vielen Dank für Deine Bewertung
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.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MJH1998
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
Kommentar von 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

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.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MJH1998
22.06.2016, 22:57

Meinst du so: 

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

0
Kommentar von G0lD3Nc0Ld
22.06.2016, 23:01

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

1

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.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?