Scanner Problem mit String

Hallo
Ich versuche gerade für die FH eine Java-Programm zu schreiben. Es soll darum gehen Rechenaufgaben in ungekehrt polnischer Notation einzulesen und diese auszuwerten. („5 3 + 2 *“ bedeutet „(5 + 3) * 2“ (Klammer weil 5+3 zuerst ausgewertet wird.
Ich habe mir eine Textdatei mit der Zeile „5 3 + 2 *“ geschrieben und diese lasse ich von einem Scanner lesen.

Ich habe folgende Methode:

public String nextOperation() {
String Operation = this.sc.next();
System.out.println(„Op=“ + Operation);
return Operation;
}

[Die Kommandozeile gibt mir aus „Op=+“ - alles soweit ok]

Aber wenn ich die Methode in meiner Main-Methode aufrufe:

S1.pop(S1.nextOperation());
S1.result();

//Gibt mir das Ergebnis auf die Konsole
// pop verknüpft 2 vorher eingelesene Zahlen mit der Übergebenen Rechenoperation. Ein if-Block in der pop-Methode sieht so aus:

if (operation=="/") {
this.result = this.dZahlen[0]/this.dZahlen[1];
System.out.println("/:" + this.result);

Ich bekomme immer nur die Ausgabe „Result: 0.0“ auf die Konsole

Ich hoffe, dass ich es verständlich machen konnte und würde mich über eine kleine Hilfestellung freuen.

Gruss Michael

Moien

Es kann an dutzenden Sachen liegen, aber in dem Code hier fällt ein Anfängerfehler ins Auge:

if (operation=="/") {

== vergleicht 2 Objektreferenzen. Das String-Object operation ist aber nicht das gleiche Stringobjekt wie das „/“. Bei Stringvergleich (gleicher Inhalt, evtl. anderes Objekt) nimmt man equals, also:

if (operation.equals("/")) {

cu

minimale Verbesserung

if (operation.equals("/")) {

Besser ist sogar noch

if("/".equals(operation)

Somit wird eine NullPointerException von vorn herein ausgeschlossen…

Danke, das war es direkt.

Leider verstehe ich nicht so recht wo das Problem lag. Bei nem kleinen Test den ich geschribeben habe funktioniert es mit if(OP=="+"):

String OP = „+“;
if (OP=="+") {
System.out.println(„geht doch“);
} else System.out.println(„geht nicht“);

Warum funktioniert dies und das andere nicht?

Gruss Michael

Moien

Warum funktioniert dies und das andere nicht?

weil der Compiler klever ist. Der Compiler sieht 2x den String „+“ und legt nur eine Kopie davon in der Class-Datei an. Die ist dann sowohl was die Zeichenfolge als auch was die Objektreferenz angeht gleich.

Gegenbeispiel:

String s1 = „1+“;
String s2 = „1“;
String s3 = „+“;

String test = s2 + s3; //ergibt „1+“
if (test == s1){
System.out.println („gleiches Objekt“);
}
if (test.equals(s1)){
System.out.println („gleiche Zeichen im Objekt“);
}

Da sieht der Compiler nicht dass test und s1 die gleichen Zeichen enthalten.

Kuck dir die Methode String.intern() an. Darüber geht es auch, aber das ist langsamer und umständlicher.

cu