Taschenrechnerfragen

Wäscheleine

Mitglied
Hallo,

mir ist es peinlich hier zu fragen wenn ich so sehe was manche andere für komplizierte Fragen im Anfängerforum haben und ich mit nem billigen Taschenrechner ankomme :D

Also ich habe dazu 2 Fragen.
Hier erstmal der Code:

Java:
import java.util.Scanner;
public class Programm {

		public static void main (String [] args)
		{
			
		String Addition = "+";
		String Subtraktion = "-";
		String Multiplikation = "*";
		String Division = "/";
		
		Scanner RechenartAuswahl = new Scanner (System.in);
		System.out.println ("Bitte Rechenart auswählen");
		System.out.println ("'+', '-', '*' oder '/'.");
		String Auswahl = RechenartAuswahl.nextLine();
		
		if (Auswahl.equals(Addition))
		{
			System.out.println("Addition ausgewählt");
			Scanner Additionsrechnung = new Scanner (System.in);
			
			System.out.println ("Zahl 1 eingeben:");
			int AdditionZahl1 = Additionsrechnung.nextInt();
			System.out.println ("Zahl 2 eingeben:");
			int AdditionZahl2 = Additionsrechnung.nextInt();
			System.out.println ("Das Ergebnis lautet: " + AdditionZahl1+AdditionZahl2);
			
		}
		else if (Auswahl.equals(Subtraktion))
		{
			System.out.println("Subtraktion ausgewählt");
		Scanner Subtraktionsrechnung = new Scanner (System.in);
		System.out.println ("Zahl 1 eingeben:");
		int SubtraktionZahl1 = Subtraktionsrechnung.nextInt();
		System.out.println ("Zahl 2 eingeben:");
		int SubtraktionZahl2 = Subtraktionsrechnung.nextInt();
		System.out.println ("Das Ergebnis lautet: " + (SubtraktionZahl1-SubtraktionZahl2));
			
				
		}
		else if (Auswahl.equals(Multiplikation))
		{
			System.out.println("Multiplikation ausgewählt");
		Scanner Multiplikationsrechnung = new Scanner (System.in);
		System.out.println ("Zahl 1 eingeben:");
		int MultiplikationZahl1 = Multiplikationsrechnung.nextInt();
		System.out.println ("Zahl 2 eingeben:");
		int MultiplikationZahl2 = Multiplikationsrechnung.nextInt();
		System.out.println ("Das Ergebnis lautet: " + MultiplikationZahl1*MultiplikationZahl2);
		}
		
		else if (Auswahl.equals(Division))
		{
			System.out.println("Division ausgewählt");
		Scanner Divisionsrechnung = new Scanner (System.in);
		System.out.println ("Zahl 1 eingeben:");
		int DivisionZahl1 = Divisionsrechnung .nextInt();
		System.out.println ("Zahl 2 eingeben:");
		int DivisionZahl2 = Divisionsrechnung .nextInt();
		System.out.println ("Das Ergebnis lautet: " + DivisionZahl1/DivisionZahl2);
		System.out.println ("Mit Rest: " + DivisionZahl1%DivisionZahl2);
		}
			
		
		else if (Auswahl.isEmpty())
		{
			System.err.println("Fehler.");
		}
		
		else {
			System.err.println("Fehler 2.");
		
		}
		
		
		}
}


Dabei geht es mir um:
Java:
System.out.println ("Das Ergebnis lautet: " + (SubtraktionZahl1-SubtraktionZahl2));

Eclipse gibt mir einen Fehler wenn ich das so schreibe:
Java:
System.out.println ("Das Ergebnis lautet: " + SubtraktionZahl1-SubtraktionZahl2);
"The operator - is undefined for the argument type(s) String,int"

Aber bei den anderen Rechenarten funktioniert es doch auch ohne zusätzliche Klammern, wieso?

Und das Programm geht ja nicht weiter sobald ich eine Rechnung eingegeben habe und er mir das Ergebnis zeigt. Gibt es eine möglichkeit danach wieder zu Zeile 7 bzw. 13 zu Springen um das Programm erneut zu starten?


Danke :p
 

Antoras

Top Contributor
Die Operatoren * und / haben eine höhere Priorität als + und -. Sie werden als erstes ausgewertet. Erst danach wird der append-Operator (+) ausgewertet, der des Ergebnis dem String ergänzt. Bei dem - wertet der Parser als erstes den append-Operator aus (da gleiche Priorität wie -) und gibt dann einen Fehler aus weil er nicht weiß was er mit dem - machen soll.

Um mehrere Eingaben möglich zu machen kannst du eine Schleife um den Block setzen, der mehrmals ausgeführt werden soll.

EDIT: Die Addition musst du ebenfalls wie die Subtraktion einklammern, da die +-Operatoren sonst alle als append-Operatoren ausgewertet werden und die Zahlen dann einzeln an den String angehängt werden.
 
Zuletzt bearbeitet:
K

Koffler

Gast
Das Programm in einer
Java:
while(Abbruchbedingung Taste sowieso)
(ab Zeile 11) packen.

Und zu deinem wieso das nicht geht! Man sollte generell wenn man solch eine Ausgabe haben möchte, wo eine Rechnung ausgeführt wird, in Klammern packen.
Das genaue wieso kann ich dir leider nicht sagen.
 

Wäscheleine

Mitglied
Die Operatoren * und / haben eine höhere Priorität als + und -. Sie werden als erstes ausgewertet. Erst danach wird der append-Operator (+) ausgewertet, der des Ergebnis dem String ergänzt. Bei dem - wertet der Parser als erstes den append-Operator aus (da gleiche Priorität wie -) und gibt dann einen Fehler aus weil er nicht weiß was er mit dem - machen soll.

Um mehrere Eingaben möglich zu machen kannst du eine Schleife um den Block setzen, der mehrmals ausgeführt werden soll.

EDIT: Die Addition musst du ebenfalls wie die Subtraktion einklammern, da die +-Operatoren sonst alle als append-Operatoren ausgewertet werden und die Zahlen dann einzeln an den String angehängt werden.

Ah okay :>

Allerdings verstehe ich grad selber nicht wieso er die Addition trotzdem korrekt ausführt, normalerweise müsste er das doch auch als append operator erkennen oder so?!
 

Wäscheleine

Mitglied
Kann nicht sein. Wenn du zwei mal eine 5 eingibst, dann müsste bei der Addition als Ergebnis 55 rauskommen. Prüf das nochmal nach...

Ups du hast Recht :oops:



Also ich habe mir das mit do/while angeguckt aber er wiederholt nur, nach einer Frage soll das Programm beendet werden, wenn man 1 drückt:

Java:
import java.util.Scanner;
public class Programm {

		public static void main (String [] args)
		{
			
		String Addition = "+";
		String Subtraktion = "-";
		String Multiplikation = "*";
		String Division = "/";
		int Beenden = 0;
		
		
		do {
		
		Scanner RechenartAuswahl = new Scanner (System.in);
		System.out.println ("Bitte Rechenart auswählen");
		System.out.println ("'+', '-', '*' oder '/'.");
		String Auswahl = RechenartAuswahl.nextLine();
		
		if (Auswahl.equals(Addition))
		{
			System.out.println("Addition ausgewählt");
			Scanner Additionsrechnung = new Scanner (System.in);
			
			System.out.println ("Zahl 1 eingeben:");
			int AdditionZahl1 = Additionsrechnung.nextInt();
			System.out.println ("Zahl 2 eingeben:");
			int AdditionZahl2 = Additionsrechnung.nextInt();
			System.out.println ("Das Ergebnis lautet: " + (AdditionZahl1+AdditionZahl2));
			
		}
		else if (Auswahl.equals(Subtraktion))
		{
			System.out.println("Subtraktion ausgewählt");
		Scanner Subtraktionsrechnung = new Scanner (System.in);
		System.out.println ("Zahl 1 eingeben:");
		int SubtraktionZahl1 = Subtraktionsrechnung.nextInt();
		System.out.println ("Zahl 2 eingeben:");
		int SubtraktionZahl2 = Subtraktionsrechnung.nextInt();
		System.out.println ("Das Ergebnis lautet: " + (SubtraktionZahl1-SubtraktionZahl2));
			
				
		}
		else if (Auswahl.equals(Multiplikation))
		{
			System.out.println("Multiplikation ausgewählt");
		Scanner Multiplikationsrechnung = new Scanner (System.in);
		System.out.println ("Zahl 1 eingeben:");
		int MultiplikationZahl1 = Multiplikationsrechnung.nextInt();
		System.out.println ("Zahl 2 eingeben:");
		int MultiplikationZahl2 = Multiplikationsrechnung.nextInt();
		System.out.println ("Das Ergebnis lautet: " + (MultiplikationZahl1*MultiplikationZahl2));
		}
		
		else if (Auswahl.equals(Division))
		{
			System.out.println("Division ausgewählt");
		Scanner Divisionsrechnung = new Scanner (System.in);
		System.out.println ("Zahl 1 eingeben:");
		int DivisionZahl1 = Divisionsrechnung .nextInt();
		System.out.println ("Zahl 2 eingeben:");
		int DivisionZahl2 = Divisionsrechnung .nextInt();
		System.out.println ("Das Ergebnis lautet: " + (DivisionZahl1/DivisionZahl2));
		System.out.println ("Mit Rest: " + (DivisionZahl1%DivisionZahl2));
		}
			
		
		else if (Auswahl.isEmpty())
		{
			System.err.println("Fehler.");
		}
		
		else {
			System.err.println("Fehler 2.");
		
		}
		System.out.println("1 drücken zum Beenden");
		Scanner NochmalFrage = new Scanner (System.in);
		int NochmalEingabe = NochmalFrage.nextInt();
		
		if (NochmalEingabe == (1));
		{
			Beenden = 1;
		}
		 
		}
		while (Beenden == (1));
		System.out.println("Programm beendet!");
		}
}


Java:
System.out.println("1 drücken zum Beenden");
		Scanner NochmalFrage = new Scanner (System.in);
		int NochmalEingabe = NochmalFrage.nextInt();
		
		if (NochmalEingabe == (1));
		{
			Beenden = 1;
		}
		 
		}
		while (Beenden == (1));
		System.out.println("Programm beendet!");
		}
}
 
G

Gast2

Gast
Java:
while (Beenden == (1));
=>
Java:
while (Beenden != 1);
(Variablen schreibt man klein :) )
 

Ralph-Uwe

Bekanntes Mitglied
Hallo

bei:
Java:
System.out.println (SubtraktionZahl1-SubtraktionZahl2);
wird die Zweite Zahl von der Ersten abgezogen und korrekt angezeigt.

Werden aber bei der Ausgabe zwei Stings aneinander gehängt:

Java:
System.out.println ("String1" + "String2");

wird das "+" als verkettung für die Strings verwendet und nicht mehr als + Operator.(das gilt für den Rest der Ausgabe)
Aus diesem Grund muss eine mathematische Operation dann in Klammern gesetz werden.

Java:
System.out.println ("Das Ergebnis lautet: " + (SubtraktionZahl1-SubtraktionZahl2));

Der Fehler entsteht, da es keine "-" Verkettung von Strings gibt.
 

Wäscheleine

Mitglied
Hallo

bei:
Java:
System.out.println (SubtraktionZahl1-SubtraktionZahl2);
wird die Zweite Zahl von der Ersten abgezogen und korrekt angezeigt.

Werden aber bei der Ausgabe zwei Stings aneinander gehängt:

Java:
System.out.println ("String1" + "String2");

wird das "+" als verkettung für die Strings verwendet und nicht mehr als + Operator.(das gilt für den Rest der Ausgabe)
Aus diesem Grund muss eine mathematische Operation dann in Klammern gesetz werden.

Java:
System.out.println ("Das Ergebnis lautet: " + (SubtraktionZahl1-SubtraktionZahl2));

Der Fehler entsteht, da es keine "-" Verkettung von Strings gibt.

Danke :)
Die Berechnungen für * und / ohne Klammern zeigen keine Fehler an (Obwohl ich das natürlich absofort machen werde ;) ) aber ich frage mich wieso? Meines kleinen Wissens nach bisher weis ich das * und / keine Operatoren für die Verkettung von Strings sind.



Das mit do/while hab ich auch verstanden.
Ich hätte auch statt der 1 eine 0 schreiben können also:
Java:
while (Beenden == 0);

Nochmal ein bisschen geschnippelt, wenn man 0 drückt, fängt er nochmal von vorne an. Läuft also wie es soll :)

Java:
		System.out.println("1 drücken zum Beenden");
		Scanner NochmalFrage = new Scanner (System.in);
		int NochmalEingabe = NochmalFrage.nextInt();
		
		if (NochmalEingabe == (1))
		{
			Beenden = (1);
		}
		else 
		{
			Beenden = (0);
		} 
		
		
		}
		while (Beenden != 1);
		System.out.println("Programm beendet!");
 

Suinos

Bekanntes Mitglied
Wäscheleine hat gesagt.:
Die Berechnungen für * und / ohne Klammern zeigen keine Fehler an (Obwohl ich das natürlich absofort machen werde ) aber ich frage mich wieso? Meines kleinen Wissens nach bisher weis ich das * und / keine Operatoren für die Verkettung von Strings sind.

Wegen der Reihenfolge, in der der Compiler dies auswertet (Punkt vor Strich, von Links nach Rechts):
(Quelle: JLS, als Liste)

Java:
"Das Ergebnis lautet: " + AdditionZahl1+AdditionZahl2
->
  1. Code:
    "Das Ergebnis lautet: " + AdditionZahl1
    => String
  2. Code:
    String + AdditionZahl2
    => String

Java:
"Das Ergebnis lautet: " + SubtraktionZahl1-SubtraktionZahl2
->
  1. Code:
    "Das Ergebnis lautet: " + SubtraktionZahl1
    => String
  2. Code:
    String - SubtraktionZahl2
    => Fehlermeldung, '-' ist kein gültiger Operator für String

Java:
"Das Ergebnis lautet: " + MultiplikationZahl1*MultiplikationZahl2
->
  1. Code:
    MultiplikationZahl1*MultiplikationZahl2
    => int
  2. Code:
    "Das Ergebnis lautet: " + int
    => String
 

Wäscheleine

Mitglied
Wegen der Reihenfolge, in der der Compiler dies auswertet (Punkt vor Strich, von Links nach Rechts):
(Quelle: JLS, als Liste)

Java:
"Das Ergebnis lautet: " + AdditionZahl1+AdditionZahl2
->
  1. Code:
    "Das Ergebnis lautet: " + AdditionZahl1
    => String
  2. Code:
    String + AdditionZahl2
    => String

Java:
"Das Ergebnis lautet: " + SubtraktionZahl1-SubtraktionZahl2
->
  1. Code:
    "Das Ergebnis lautet: " + SubtraktionZahl1
    => String
  2. Code:
    String - SubtraktionZahl2
    => Fehlermeldung, '-' ist kein gültiger Operator für String

Java:
"Das Ergebnis lautet: " + MultiplikationZahl1*MultiplikationZahl2
->
  1. Code:
    MultiplikationZahl1*MultiplikationZahl2
    => int
  2. Code:
    "Das Ergebnis lautet: " + int
    => String

Das ist einleuchtend, vielen Dank.

Danke auch an alle anderen hier :)
:toll:
 

Neue Themen


Oben