# IF Anweisung mit logischen Operatoren



## enHanced (20. Aug 2010)

Guten Tag,

ich habe vor ~ 2h angefangen mich mit Java zu beschäftigen und wollte einen "sehr kleinen" Taschenrechner schreiben.

Nur stoße ich auf ein Problem . Ich wollte die Anweisungen eigentlich über switch/case ( wie ich es aus php kenne ) ausführen - nur haut das nicht hin. So habe ich dann einfach 4 IF-Anweisungen erstellt..

Jetzt das Problem: Das Programm ignoriert die IF-Anweisungen und spricht nicht auf die Operatoren an, nachdem ich die 3 Eingaben getätigt habe wird das Programm einfach beendet.

Ich bin ein absoluter Neuling in Sachen Java ( auch allgemein Programmiersprachen, php lediglich paar Basics.. ) also bitte ich um Nachsicht .

Vielen Dank für eure Hilfe!

Grüße,
enHanced


```
import java.io.*;

public class test1 {

	// Eingabestrom
    static InputStreamReader input  = new InputStreamReader(System.in);

    // Eingabepuffer
    static BufferedReader keyboardInput = new BufferedReader(input);


    public static void main(String[] args) throws IOException {

    int zahl1;
    int zahl2;
    String operator;
    int ergebnis;

	System.out.println("Gebe Plus(+), Minus(-), Mal(*) oder Geteilt(/) an");
	operator = keyboardInput.readLine();
	System.out.println("Nun gebe die erste Zahl ein");
    zahl1 = Integer.parseInt(keyboardInput.readLine());
    System.out.println("Nun gebe die zweite Zahl ein");
    zahl2 = Integer.parseInt(keyboardInput.readLine());

     if (operator == "+"){
     ergebnis = zahl1 + zahl2;
     System.out.println("Das Ergebniss lautet "+ ergebnis +"");
     }
     
     if (operator == "*"){
     ergebnis = zahl1 * zahl2;
     System.out.println("Das Ergebniss lautet "+ ergebnis +"");
     }
     
     if (operator == "/"){
     ergebnis = zahl1 / zahl2;
     System.out.println("Das Ergebniss lautet "+ ergebnis +"");
     }
     
     if (operator == "-"){
     ergebnis = zahl1 - zahl2;
     System.out.println("Das Ergebniss lautet "+ ergebnis +"");
     }
    }
}
```


----------



## eRaaaa (20. Aug 2010)

Die Abfrage wird nicht ignoriert, sie macht aber nicht das was du vemrutest/machen willst, lese : http://www.java-forum.org/top-fragen/1350-vergleichen-strings.html :toll:


----------



## enHanced (20. Aug 2010)

Dank dir 

Ich schäme mich


----------



## raver1 (23. Sep 2010)

Guten tag:

Ich beschäftige mich erst seit kurzem mit java und habe ein ähnliches Problem:

Ich soll einen (ganz ) einfachen Taschenrechner schreiben der zwei int werte über einen grafischen Dialog einliest und das Ergebnis grafisch ausgibt.

Der Tachenrechner soll adieren , subtrahieren , dividieren und multiplizieren können. Diese funktionen sollen jeweils als methode angelegt werden.

Zusätzlich muss vorher grafisch abgefragt werden welche Methode benutzt werden soll, und genau da hakt es:

Hier ist erst einmal mein Quellcode (mit Eclipse verfasst und ohne Kommentare)




```
import javax.swing.JOptionPane;


public class TaschenRechner {
	static boolean Adieren;
	static boolean Subtrahieren;
	static boolean Multiplizieren;
	static boolean Dividieren;
	

	static int Adition(int zahl1, int zahl2){
		int AusgabeAdition;
		AusgabeAdition = zahl1  + zahl2;
		return  AusgabeAdition;
		
		}
	
	static int Subtraktion(int zahl1, int zahl2){
		int AusgabeSubtraktion;
		AusgabeSubtraktion = zahl1 - zahl2;
		return AusgabeSubtraktion;
		}
	
	static int Multiplikation(int zahl1, int zahl2){
		int AusgabeMultiplikation;
		AusgabeMultiplikation = zahl1 * zahl2;
		return AusgabeMultiplikation;
	}
	
	static int Division(int zahl1, int zahl2){
		int AusgabeDivision;
		AusgabeDivision = zahl1 / zahl2;
		return AusgabeDivision;
		}
	
		
	
	public static void main(String[]args){
		int erstezahl;
		int zweitezahl;
		
		
		erstezahl = Integer.parseInt(JOptionPane.showInputDialog("Geben sie die erste Zal ein"));
		zweitezahl = Integer.parseInt(JOptionPane.showInputDialog("Geben sie die zweite Zahl ein"));
		
		Integer.parseInt(JOptionPane.showInputDialog(" Welche rechenoperation sol durchgeführt werden? Biite geben Sie Adieren, Subtrahieren, Multiplizieren, oder Dividieren ein"));
		
		if ( Adieren = true)
		{	
		Integer.parseInt(JOptionPane.showInputDialog(" Das Ergebnis der beiden zahlen ist:" + Adition(erstezahl, zweitezahl)));
		}
		else
			
	    if (Subtrahieren = true)
		{	
		Integer.parseInt(JOptionPane.showInputDialog(" Das Ergebnis der beiden zahlen ist;" + Subtraktion(erstezahl, zweitezahl)));
		}
	    else 
	    	
	    if (Multiplizieren  = true)
		
		{		
		Integer.parseInt(JOptionPane.showInputDialog(" Das Ergebnis der beiden zahlen ist:" + Multiplikation(erstezahl, zweitezahl)));
		}
	    else
	    	
		if ( Dividieren = true)
				
	    {
		Integer.parseInt(JOptionPane.showInputDialog(" Das Ergebnis der beiden zahlen ist:" + Division(erstezahl, zweitezahl)));
		}
		
		
		
	
		
		// TODO Auto-generated method stub

		System.exit(0);
			
	

	
	}
}
```
beim ausführen bzw nach den ersten 3 grafischen eingaben wo die Methoden aufgerufen werden  sollen kommt folgender fehler:

Exception in thread "main" java.lang.NumberFormatException: For input string: "Subtrahieren"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at TaschenRechner.main(TaschenRechner.java:46)

Vieleicht ist ja auch die boolean abfrage auch  qutasch. ???:L  Ich weiß leider nicht wie man grafische eingabe dialoge mit einer if else bedingung abfragt.

Kann mir hier jemand helfen?

danke schon mal im voraus


----------



## Michael... (23. Sep 2010)

raver1 hat gesagt.:


> ```
> Integer.parseInt(JOptionPane.showInputDialog(" Welche rechenoperation sol durchgeführt werden? Biite geben Sie Adieren, Subtrahieren, Multiplizieren, oder Dividieren ein"));
> ```


Der Anwender soll hier ein String eingeben und das Programm versucht diesen in eine Zahl zu parsen! Das kann ja nur Schief gehen ;-)

PS. Man darf für neue Fragen auch neue Threads aufmachen.


----------



## Volvagia (23. Sep 2010)

1) Steht ja in der Exception: Formationsfehler der Zahl "Subtrahieren". Speicher es als String.
2) Variablen schreibt man klein und camelCase.
3) "Addieren" schreibt man mit 2 d.
4) Nach dem nur eine der 4 Klasse-booleans true sein kann, würde ich nur eine Variable verwenden, der die Operation angibt.
5) Für Ausgaben nutzt man (u. a.) JOptionPane.showMessageDialog.
6) Du könntest die Rechenoperation direkt ins return schreiben. (Nur so am Rand.)
7) Nimm keine int sondern double, sonst kannst du keine Gleitkommazahlen benutzen, die du warscheinlich mindestens bei divisionen zurückbekommst. (System.out.println(5 / 2) = 2, System.out.println(5 / (double)2) = 2.5). Achte aber darauf, dass es nicht immer 100 % genau ist.


Edit: Schon wieder zu langsam. >.< Hier ist echt ne Menge los.


----------



## Michael... (23. Sep 2010)

Außerdem sollte man, wenn man einen Wert einliest und parst diesen auch in einer Variablen speichern.
Naja und in den folgenden Zeilen ist soviel *** drin, da sollte man sich vielleicht mal in die Grundlagen der Programmierung einlesen.


----------



## raver1 (27. Sep 2010)

erst mal danke für die antworten:

ich habe meine  Quellcode etwas umgeschrieben: Hier ist das Resultat:


```
import javax.swing.*;


public class TaschenRechner {
	static double zahl1, zahl2;
// Die Methoden
	
	static double Adition(double zahl1,double zahl2){
		double AusgabeAddition;
		AusgabeAddition = zahl1  + zahl2;
		return  AusgabeAddition;
		
		}
	
	static double Subtraktion(double zahl1, double zahl2){
		double AusgabeSubtraktion;
		AusgabeSubtraktion = zahl1 - zahl2;
		return AusgabeSubtraktion;
		}
	
	static double Multiplikation(double zahl1, double zahl2){
		double AusgabeMultiplikation;
		AusgabeMultiplikation = zahl1 * zahl2;
		return AusgabeMultiplikation;
	}
	
	static double Division(double zahl1, double zahl2){
		double AusgabeDivision;
		AusgabeDivision = zahl1 / zahl2;
		return AusgabeDivision;
		}
	
		// die zweite Klasse
	
	public static void main(String[] args){
		
		zahl1 =Integer.parseInt(JOptionPane.showInputDialog("Bitte geben sie die erste Zahl ein"));
		zahl2 =Integer.parseInt(JOptionPane.showInputDialog("Bitte geben sie die zweite Zahl ein"));
		
		String rechenoperation =JOptionPane.showInputDialog("Wählen Sie durch eine Eingabe zwischen Addition, Subtraktion, Division und Multiplikation:");
        
         
		// wenn die Addition gewählt wurde
		
		if (rechenoperation == "Addition")
		{
			// Werte an die entsprechende Methode weitergeben
			double AusgabeAdition = Adition(zahl1,zahl2);
			JOptionPane.showInputDialog("Das Ergebnis ist:" +Adition(zahl1, zahl2));
			
		}
		// wenn die Subtraktion gewählt wurde
		else if (rechenoperation == "Subtraktion")
			
		{
			// Werte an die entsprechende Methode weitergeben
			 double AusgabeSubtraktion = Subtraktion(zahl1, zahl2);
			JOptionPane.showInputDialog("Das Ergebnis ist:" +Subtraktion(zahl1, zahl2));
		}
		// wenn die Division gewählt wurde
		else if (rechenoperation == "Division")
		{
			// Werte an die entsprechende Methode weitergeben
		 double AusgabeDivision = Division(zahl1, zahl2);
			JOptionPane.showInputDialog("Das Ergebnis ist:" +Division(zahl1, zahl2));
		}
		// wenn die Multiplikation gewählt wurde
		else if (rechenoperation == "Multiplikation")
		{
			// Werte an die entsprechende Methode weitergeben
			 double AusgabeMultiplikation = Multiplikation(zahl1, zahl2);
			JOptionPane.showInputDialog("Das Ergebnis ist:" + Multiplikation(zahl1, zahl2));
		}
		// wenn keine Rechenoperation gewählt wurde, Fehler ausgeben
		else
		{
			JOptionPane.showInputDialog("Entschuldigung, Sie haben keine Rechenoperation gewählt oder ggf. einen Fehler in der Schreibweise. Versuchen Sie es bitte erneut.");
			
		}
		System.exit(0); 
		
			}
}
```

Das lässt sich auch übersetzen .. jedoch werden bei der Grafischen Abfrage alle else if Anweisungen übersprungen und es wird nur der letzte Grafische Dialog  angezeigt.

Es ist mir klar, das das daran liegt das ich String Zeichenketten mit string equals(string) vergleichen muss. Nur das klappt nicht, weil string  equals (string) anscheinend nur strings vergleichen kann, wenn eine boolean variable vorhanden ist. Und genau die ist ja ich nicht vorhanden. Bzw ich weiß nicht wie ich das mit boolean realisieren kann.

kann mir bitte jemand helfen?


danke


----------



## eRaaaa (27. Sep 2010)

raver1 hat gesagt.:


> Nur das klappt nicht, weil string  equals (string) anscheinend nur strings vergleichen kann, wenn eine boolean variable vorhanden ist. Und genau die ist ja ich nicht vorhanden.



Mhm? equals liefert doch entweder true oder false ?!

if (rechenoperation == "Addition") --> if ("Addition".equals(rechenoperation))
(bei dem Rest natürlich auch)


----------



## Gast2 (27. Sep 2010)

?

So funktioniert das doch:


```
if (rechenoperation.equals("Addition")) {
            // Werte an die entsprechende Methode weitergeben
            double AusgabeAdition = Adition(zahl1, zahl2);
            JOptionPane.showInputDialog("Das Ergebnis ist:" + Adition(zahl1, zahl2));

        } // wenn die Subtraktion gewählt wurde
        else if (rechenoperation.equals("Subtraktion")) {
            // Werte an die entsprechende Methode weitergeben
            double AusgabeSubtraktion = Subtraktion(zahl1, zahl2);
            JOptionPane.showInputDialog("Das Ergebnis ist:" + Subtraktion(zahl1, zahl2));
        } // wenn die Division gewählt wurde
        else if (rechenoperation.equals("Division")) {
            // Werte an die entsprechende Methode weitergeben
            double AusgabeDivision = Division(zahl1, zahl2);
            JOptionPane.showInputDialog("Das Ergebnis ist:" + Division(zahl1, zahl2));
        } // wenn die Multiplikation gewählt wurde
        else if (rechenoperation.equals("Multiplikation")) {
            // Werte an die entsprechende Methode weitergeben
            double AusgabeMultiplikation = Multiplikation(zahl1, zahl2);
            JOptionPane.showInputDialog("Das Ergebnis ist:" + Multiplikation(zahl1, zahl2));
        }
```


----------



## raver1 (28. Sep 2010)

Vielen dank jetzt hat ( fast alles geklaptt) ;-)

Als Zusatzaufgabe soll ich aber noch eine Methode schreiben die zum Schluss alle Ergebnisse von den 4  Rechenoperationen anzeigt:

hier ist die Methode:



```
static double GesamtErgebnis (double zahl1, double zahl2){
		gesamtergebnis =  
		return gesamtergebnis ;
	}
```

In die Zeile gesamtergebnis will ich jetzt die Rechnungen miteinander verknüpfen das heißt so :

zahl1 + zahl2 UND zahl1 - zahl2  usw:

Leider weiß ich nicht welcher Operator dafür verwendet werden kann (oder ob ich es anders machen muss?!) der logische Opeartor && scheidet ja aus. könnt ihr mir kurz helfen?

dann bin ich erstmal fertig

danke nochmal 

gruß raver


----------



## w0ddes (28. Sep 2010)

Hä?


----------



## raver1 (28. Sep 2010)

Die Aufgabenstellung ist ganz simpel:

Schreiben Sie eine Methode die alle Ergebnisse der Rechenoperation als Gesamtausgabe auf dem Bildschirm anzeigt.

 Das hab ich erstmal mit einer normalen Methode versucht.


----------



## VfL_Freak (28. Sep 2010)

Moin,



raver1 hat gesagt.:


> Als Zusatzaufgabe soll ich aber noch eine Methode schreiben die zum Schluss alle Ergebnisse von den 4  Rechenoperationen anzeigt:
> hier ist die Methode:
> 
> ```
> ...



so sollte es klappen:

```
static double GesamtErgebnis (double zahl1, double zahl2)
{    
    double gesamtergebnis = 0; // NICHT VERGESSEN !!
    gesamtergebnis += (zahl1 + zahl2);
    gesamtergebnis += (zahl1 - zahl2);
    // usw.

    return gesamtergebnis ;
}
```

ist aber VHIDT 

Gruß
Klaus

*[EDIT]* alle einzelnen Ergebnisse ???:L
Dann übergib' doch Deine vier Ergebnisse an diese Funktion und schreibe sie nacheinander mit "System.out.println ( ... )" raus


----------



## raver1 (28. Sep 2010)

Halo VFL_ Freak

Mit deinem code lässt es sich zwar übersetzen aber die Ergebnisse stimmen leider nicht. Wenn ich z. b 5 und 6 eingebe und es dann multipliziere kommt 30 raus. So weit so gut... nur beim nächsten klick kommt 40 raus??

Die Ausgabe mit println ist klar, nur wie
 übergebe ich das denn an die Funktion. das versteh ich gerade nicht (bin vieleicht gerde zu dämlich dafür=) ;-)


----------



## w0ddes (28. Sep 2010)

Ich versteh einfach nicht, was du mit der gesamtergebnis-Funktion erreichen willst!


----------



## Gast2 (28. Sep 2010)

Du musst dir die jeweiligen Zwischenergebnisse abspeichern. Sonst wird das nichts.


----------



## VfL_Freak (28. Sep 2010)

Also, wenn ich es richtig verstehe, dann ungefähr so (wie immer VHIDT) :

```
Double dAdd, dSubtr, dDiv, dMult = null;

if( rechenoperation.equals("Addition") ) 
{
    double AusgabeAddition = Addition( zahl1, zahl2 );
    dAdd = new Double( AusgabeAddition );
    JOptionPane.showInputDialog( "Das Ergebnis ist:" + dAdd.toString() );
}
else if( rechenoperation.equals("Subtraktion") ) 
{
    double AusgabeSubtraktion = Subtraktion( zahl1, zahl2 );
    dSubtr = new Double( AusgabeSubtraktion );
    JOptionPane.showInputDialog( "Das Ergebnis ist:" + dSubtr.toString() );
}
else if( rechenoperation.equals("Division") ) 
{
    double AusgabeDivision = Division( zahl1, zahl2 );
    dDiv = new Double( AusgabeDivision );
    JOptionPane.showInputDialog( "Das Ergebnis ist:" + dDiv.toString() );
}
else if( rechenoperation.equals("Multiplikation") ) 
{
    double AusgabeMultiplikation = Multiplikation( zahl1, zahl2 );
    dMult = new Double( AusgabeMultiplikation );
    JOptionPane.showInputDialog( "Das Ergebnis ist:" + dMult.toString() );
}

// Aufruf :
GesamtErgebnis( dAdd, dSubtr, dDiv, dMult );

// --------------------------------------------------------------------------------

static void GesamtErgebnis( Double dErgAdd, Double dErgSubtr, Double dErgDiv, Double dErgMult )
{
    // ACHTUNG: zahl1/2 müssen für die Ausgabe in die Wrapperklasse "Double" konvertiert werden!!
    Double dZahl1 = new Double( zahl1 );
    Double dZahl2 = new Double( zahl2 );
    
    System.out.println( "eingegebene Zahlen" + dZahl1.toString() + "/" + dZahl2.toString() ); 
    System.out.println( "das Ergebnis der Addition: " + dErgAdd.toString() );
    System.out.println( "das Ergebnis der Subtraktion: " + dErgSubstr.toString() );
    // etc.        
}
```

Gruß
Klaus


----------



## raver1 (15. Okt 2010)

Tut mir leid das ich mich erst jetzt melde ;-) Es hat alles geklappt.

danke


----------

