# Zwei Strings vergleichen?



## mathiasj (29. Mai 2012)

Hi 

Ich hab jetzt meinen ersten Taschenrechner geschrieben, bekomme aber immer eine Fehlermeldung in der Konsole... Ich glaube es liegt an einer Zeile wie diese :


```
if (rechenart == "+") { ... }
```

Also, kann ich zwei Strings einfach mit dem == Operator vergleichen?

LG, 
mathiasj


----------



## julian.veh (29. Mai 2012)

hi

nein das funktioniert mit equals

Bsp:


```
String a = "hi";
String b = "hi";

if(a.equals(b)) System.out.println("ist das gleiche, nicht das selbe :)");
```


und zwar sind Strings Objekte und da du 2 verschiedene erzeugst, sind es nicht die "selben" sondern nur die gleichen 

edit: Zu deinem Problem: 


```
if(rechenart.equals("+")) ..
```


----------



## Schandro (29. Mai 2012)

Jap, du musst Strings immer mit .equals anstatt mit == vergleichen. Allerdings wird das nichts an der Fehlermeldung in der Konsole ändern, dafür musst du schon mehr code posten.


----------



## julian.veh (29. Mai 2012)

Schandro hat gesagt.:


> Jap, du musst Strings immer mit .equals anstatt mit == vergleichen. Allerdings wird das nichts an der Fehlermeldung in der Konsole ändern, dafür musst du schon mehr code posten.



Ja stimmt, eine Fehlermeldung gibt es dafür nicht, sondern es handelt sich einfach nur nicht um die selben Objekte, weshalb die Bedingung nicht eintritt.
Wie lautet denn die Fehlermeldung?


----------



## eRaaaa (29. Mai 2012)

julian.veh hat gesagt.:


> Bsp:
> 
> 
> ```
> ...


ziemlich schlechtes Beispiel, denn hier wäre a==b -> true ;D



> und zwar sind Strings Objekte und da du 2 verschiedene erzeugst, sind es nicht die "selben" sondern nur die gleichen


in deinem Fall eben nicht.



> edit: Zu deinem Problem:
> 
> 
> ```
> ...



Ist allerdings trotzdem (fast) immer besser, noch besser wäre wohl "+".equals(rechenart)
Aber wieso verlinkt ihr nicht einfach auf den FAQ-Eintrag und erspart euch das Tippen?


----------



## mathiasj (30. Mai 2012)

Okay, vielen Dank! Jetzt klappt das schon mal!
Aber ein problem habe ich noch: Wie kann ich machen, dass der Benutzer gefragt wird, ob er noch eine Rechnung durchführen will?

So klappt das nicht - er erkennt die Variable "nochmal" nicht :


```
public class Taschenrechner {
  
  SpielHelfer h = new SpielHelfer();
  Rechnungen r = new Rechnungen();
  
  void ausführen() {
    
    do {
      
      float wahlzahl1 = Integer.parseInt(h.getBenutzereingabe("Erste Zahl: "));
      float wahlzahl2 = Integer.parseInt(h.getBenutzereingabe("Zweite Zahl: "));
      System.out.println("");
      
      String rechenart = h.getBenutzereingabe("+,-,* oder : ? ");
      
      float ergebnis = 0;
      
      if ("+".equals(rechenart)) {
        ergebnis = r.addiere(wahlzahl1,wahlzahl2);
      } // end of if
      if ("-".equals(rechenart)) {
        ergebnis = r.subtrahiere(wahlzahl1,wahlzahl2);
      } // end of if
      if ("*".equals(rechenart)) {
        ergebnis = r.multipliziere(wahlzahl1,wahlzahl2);
      } // end of if
      if (":".equals(rechenart)) {
        ergebnis = r.dividiere(wahlzahl1,wahlzahl2);
      } // end of if
      
      System.out.println("");
      
      System.out.println("Ergebnis: " + ergebnis);
      
      String nochmal = h.getBenutzereingabe("Wollen Sie noch eine Rechnung durchführen?" );
    }
    
    while ("Ja"||"ja".equals(nochmal));
    
  }
}
```

Die SpielHelfer Klasse ist eine Klasse, mit der ich die Benutzereingabe lesen kann.

LG,
mathiasj


----------



## Gast2 (30. Mai 2012)

```
while ("Ja"||"ja".equals(nochmal));
```
Da sollte dir eclipse bzw. der Java Compiler doch schon nen Fehler bringen?!

Das muss heißen:

```
while ("ja".equalsIgnoreCase(nochmal));
```


----------



## mathiasj (30. Mai 2012)

Also er bringt mir in der Zeile nur diesen Fehler:

Taschenrechner.java:38:30: error: cannot find symbol
    while ("Ja"||"ja".equals(nochmal));
                             ^
  symbol:   variable nochmal
  location: class Taschenrechner
1 error

Und bewirkt dein Code auch, dass sowohl bei der Eingabe von "Ja" als auch von "ja" das Programm nochmal durchgelaufen wird?


----------



## The_S (30. Mai 2012)

mathiasj hat gesagt.:


> Und bewirkt dein Code auch, dass sowohl bei der Eingabe von "Ja" als auch von "ja" das Programm nochmal durchgelaufen wird?



Ja. Aber auch bei JA oder jA.


----------



## mathiasj (30. Mai 2012)

Okay, das IgnoreCase bedeutet also soviel wie Ignoriere Groß-/Kleinschreibung?

Und das Programm läuft immer noch nicht... Es wird immernoch die letzte fehlermeldung angezeigt...

Gibt es außerdem eine ähnliche Funktion wie intgerer.parseInt() für floats?


----------



## knucki (30. Mai 2012)

Ehm, wie willst du mit deinen Englischkenntnissen in naher Zukunft eigenständig programmieren?

Float.parseFloat(arg0)


----------

