Wer kann diesen Code leicht erklären

Viewty-Fan

Mitglied
Hallo,
ich habe einen Code für meinen Taschenrechner. Leider habe ich trotz Internetrecherche keine genaue Information darüber bekommen, was da jetzt eigentlich passiert. Da dieser Code aber für die Schule ist sollte ich schon wissen was da genau abläuft.

Java:
public static void IstgleichListener(ActionEvent e) {
    	
		   try {
			   String Rechnung = String.valueOf(engine.eval( Display.getText() ));
			   Display.setText(Rechnung);
			   } catch (ScriptException e1) {
			   // TODO Auto-generated catch block
			   e1.printStackTrace();
			  }
			   Rechnung.setText("");
			 			   }

Was passiert da jetzt wo genau. Kann mir das jemand bitte leicht verständlich erklären?

Viewty-Fan
 
Naja, wenn man mal weglässt das der Code die Naming Conventions nicht erfüllt (sprich Variablen werden klein geschrieben) ist es ja relativ trivial, aber ich will mal nicht so sein.

Die Methode heißt "IstgleichListener" und bekommt ein ActionEvent. Sprich es wird eine Methode im ActionListener auf einem Button sein, da es ein Taschenrechner ist wohl logischerweise der "=" Button.

Was mich daran stört das die Methode static ist... Das ist nicht wirklich schön und ich denke mal völig unnötig oder der Rest vom der Anwendung ist sehr schlecht designed. Dafür spechen auch die wohl statischen zugriffe auf "Rechnung" und "Display".

Was passiert dann im Code? Sehr einfach:

Der String Variable "Rechnung" wird der Returnwert von der Methode engine.eval(String s) zugewiesen. Die Funktion wird aufgerufen mit dem String der aus dem ich vermute mal Textfeld in der GUI )= Display) geholt (getText) wird. engine.eval(String s) wird wohl vermutlich den String nehmen und die Rechnung ausführen, z.B. aus dem String "4 +5" die Zahl 9 berechnen, also den arithmetischen ausdrucken "evaluieren".
Java:
			   String Rechnung = String.valueOf(engine.eval( Display.getText() ));
Dem Textfeld wird dann der String gegeben damit er angezeigt werden kann:
Java:
			   Display.setText(Rechnung);
Exception handling - was tun wenn ein Fehler auftritt, z.B. die Rechunugn nciht durchgeführt werden kann.
Java:
			   } catch (ScriptException e1) {
			   // TODO Auto-generated catch block
			   e1.printStackTrace();
			  }
Einem weiteren Textfeld "Rechnung" leeren.
Java:
			   Rechnung.setText("");
			 			   }
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Antwort. Mich interessiert hauptsächlich was dort genau passiert:

Java:
String Rechnung = String.valueOf(engine.eval( Display.getText() ));

Mir ist klar, dass der Inhalt aus dem Display übernommen wird und das Ergebnis in den String Rechnung geschrieben wird. Aber was macht diesen engine.eval ? Es wäre toll wenn mir das jemand leicht verständlich erklären könnte.
 
Mir ist klar, dass der Inhalt aus dem Display übernommen wird und das Ergebnis in den String Rechnung geschrieben wird. Aber was macht diesen engine.eval ? Es wäre toll wenn mir das jemand leicht verständlich erklären könnte.

Wo war noch mal meine Glaskugel... *kram*

Ne, so geht das nicht. Dazu musst du schon den Quellcode von der Methode eval aus der Klasse posten. Falls du dich wunderst welche Klasse - die Klasse von welchem Typ die Variable "engine" ist. Nur die Signatur selber reicht da nicht. Da kann alles mögliche drin passieren.

Was allgemein so passiert - oder besser was ich vermute was passiert habe ich ja schon geschrieben.
 
Ich habe folgendes importiert:
Java:
import javax.script.ScriptException;
Es geht mir darum was die Methode
Java:
engine.eval
macht. ???:L
 
Wie fassy schon geschrieben hat:
...Dazu musst du schon den Quellcode von der Methode eval aus der Klasse posten. Falls du dich wunderst welche Klasse - die Klasse von welchem Typ die Variable "engine" ist. Nur die Signatur selber reicht da nicht. Da kann alles mögliche drin passieren.
Wir kennen die Klasse Engine nicht, du müsstest uns also schon den Inhalt der Klasse posten, damit wir dir sagen können was da passiert. Ich vermute aber das gleiche wie fassy auch.
 
Vermutlich ist es die eval-Methode des ScriptEngineManagers. Diese macht nichts anderes als den Code, welchem du der eval-Methode übergibst, zu analysieren und auszuführen. Das Ergebnis wird normal wieder zurückgegeben (wenn denn ein Ergebnis da ist).
 
Wenn du der Methode einen String übergibst, sie dann den String auswertet und dir ein Ergebnis zurückliefert, dass dem entsprichst, was du dir vorstellst, dann brauchst du doch garnicht mehr darüber wissen.
Die Methode System.out.println hast du ja wahrscheinlich auch schon mal genutzt, ohne dir den Quellcode dieser Methode anzusehen.
Aber falls du mehr zum Java Scripting wissen willst, gibt es wie erwähnt auch dafür eine API
 

Zurück
Oben