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?
Ich kenne mich noch nicht sonderlich aus bin also offen für Vorschläge. Danke!
package Aufgabe1; import java.util.*; public class Aufgabe1 {
public static void main(String[] args) {
Scanner s=new Scanner (System.in);
int wert;
double Rechnungsbetrag= wert+5.50;
double porto=5.50;
System.out.println("Bitte geben Sie den Bestellwert ein: ");
wert= s.nextInt();
if (wert>=200) {
System.out.println("Portofrei!");
}
else {
System.out.println("Ihr Rechnungsbetrag beträgt: " + wert + + porto);
}
}
}
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:
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.
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?
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");
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.
ne else { System.out.printIn("Ihr..." + (wert + porto));} wenn du wert und porto zusammenrechnen willst
Meinst du so:
else {
System.out.println("Ihr Rechnungsbetrag beträgt: " " + (wert + porto));
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.