Taschenrechner - Aufgabenstring umwandeln und ausrechnen

Status
Nicht offen für weitere Antworten.

badewanne

Mitglied
Hallo,

gibt es eine Methode mit der ich den inhalt eines Arrays bzw. seiner Zellen auf ein bestimmtes Zeichen untersuchen kann? Ich möchte für einen Taschenrechner der Punkt- vor Strichrechnung können soll einen Aufgaben-String wie
"1+1*2+3+4/5-6" z.B. zunächst am "+" Zeichen mit string.split zerhacken und anschließend die einzelnen Zellen des Arrays auf weitere Rechenzeichen untersuchen um sie gegebenenfalls weiter zu zerhacken bzw. rauszuschnieden.

Mein Ansatz sieht bis jetzt so aus:
Code:
public class StringSplitExample 
{
	public static void main(String[] args) 
    {
    String aufgabe = "1+1*2+3+4/5-6";
   
    String[] summanden = aufgabe.split("\\+");
   
    	for(int i= 0, length = summanden.length; i < length; i++) 
    	{
        System.out.println(summanden[i]);
        }
    }    
}

In den Zellen von "summanden" steht ja dann folgendes:

summanden[0] : 1
summanden[1] : 1*2
summanden[2] : 3
summanden[3] : 4/5-6

Jetzt weis ich nicht genau wie ich weiter machen soll, theoretisch würde ich als nächstes alle "-" raussuchen und sie in einem weiteren Array abspeichern...ich weis ich bin noch nicht wirklich weit...brauche dringend Hilfe vielleicht bin ich ja auch auf dem Holzweg, freue mich über jeden Tipp!


Gruß*Badewanne
 

Landei

Top Contributor
Mit +-*/ bekommt man es vielleicht noch so hin, wenn es aber später erweiterbar sein sollte, dann rennst du vor eine Mauer. Also
-entweder einen kleinen Parser schreiben (JavaCC, SableCC, ANTLR...)
- oder den Code von anderen klauen (für Taschenrechner gibt es wohl tausende Java-Implementierungen)
- oder (als einfachste Lösung) eine Scriptsprache einbinden(Beanshell, pnuts, rhino), weil du dann einfach nur so was wie eval("1+2*3") oder so aufzurufen brauchst.
 

badewanne

Mitglied
Hallo,

erstmal Danke für eure Tipps. Das mit dem Parser hab ich mir mal angeschaut, so ungefähr hatte ich mir das ursprünglich vorgestellt. Für mich leider nicht mal kurz dahingecoded und ich hab grad natürlich Zeitdruck. Das
mit dem Einbinden einer Skriptsprache klingt schon vielversprechend, mal sehen ob ich dazu ein gutes Tut finde...

*die Badewanne
 

badewanne

Mitglied
@ARadauer:
Danke, das hilft mir grad schon weiter, vielleicht kannst Du mir ja auch noch beim einbinden helfen... (s.u.)

@alle:
Könnt Ihr mir vielleicht noch sagen ob der Code von ARadauer alles ist was ich brauche?
Ein paar Probleme konnte ich schon lösen in dem ich einfach den Code hier eingefügt habe, da die Anführungszeichen nicht richtig übernommen wurden... :lol: - Muss ich mir vielleicht noch die RhinoScriptEngine installieren?
Bekomme jetzt einen Haufen Exceptions, die da wären:

Das war wohl nix (das spuckt der catch-Block aus)

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: illegal character (<Unknown source>#1) in <Unknown source> at line number 1
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
at javax.script.AbstractScriptEngine.eval(Unknown Source)
at BackEnd.nextCommand(BackEnd.java:58)
at CalcService.actionPerformed(CalcService.java:25)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)


hier mal mein Code, an der Stelle wo das "=" Zeichen kommt möchte ich jetzt den String der ScriptEngine übergeben:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;


public class BackEnd 
{
	private double   x, y, ergebnis;
	private String eingabeString ="";
	private String ausgabeString ="";

	public BackEnd() 
	{	
		ergebnis=0;  
	    ausgabeString="";
	    eingabeString="";
	}

	public void nextCommand(String inString)
	{
		
		eingabeString += inString;
		
		//Alles löschen
		if(inString.equals("ac"))
		{
			ergebnis = 0.;
			eingabeString = "";
		}
		
		
		//Zeichen löschen Funktion
		if(inString.equals("delete"))
		{
			if(eingabeString.equals("delete"))
				eingabeString="";
			else
			eingabeString = eingabeString.substring(0, eingabeString.length()-7);
		}
	
		//Ergebnis vom JavaSkript
		
		if(inString.equals("="))
		{
			eingabeString = eingabeString.substring(0, eingabeString.length()-1); //Gleichzeichen sofort wieder rausschneiden 
			
			String formel = eingabeString;
			
			ScriptEngineManager factory = new ScriptEngineManager();
	        ScriptEngine engine = factory.getEngineByName("JavaScript");

	        
	        try {
	            engine.eval("var v = eval(’"+formel+"‘)"); //
	            double b =(Double) engine.get("v");
	            
	            ergebnis = b;

	                  System.out.println("Ergebnis: "+b);
	           } catch (ScriptException e) {
	            System.out.println("Das war wohl nix");
	            e.printStackTrace();
	           }       
	                
	             }				
	}
	
	
	

	public String getEingabeString() 
	   {
			System.out.println("\nEingabe-String = "+eingabeString); 
			return eingabeString;
	   }

/*	public String setEingabeString(String inString) 
	   {
			
			System.out.println("\nEingabe-String = "+eingabeString); 
			return eingabeString;
	   }
*/	
	   public String getErgebnisString() 
	   {	
		    //ergebnis = 32.0; // nur für Tests 
		   
		   	// Ergebnis runden
		   	int stellen = 8; 						//Stellen auf die das Ergebnis gerundet wird
		    double factor = Math.pow(10, stellen);	//Faktor für die Rundung
		    //System.out.println((int)factor); //
		    boolean keinKommaNull;

		    // Zahl mit 100 multiplizieren, dann runden, anschliessend wieder durch 100 teilen

		    double gerundeteZahl = Math.round(ergebnis * factor) / factor;
		   
		    String erg = String.valueOf( gerundeteZahl );
		   	System.out.println("\nErgebnis-String = "+erg.toString()); 
		   	ausgabeString = erg;
		   	if(keinKommaNull = ausgabeString.endsWith(".0"))
		   		{
		   		ausgabeString = ausgabeString.substring(0, ausgabeString.length()-2);
		   		return ausgabeString;
		   		}
		   		else return ausgabeString;
	   }
	   
}
 

badewanne

Mitglied
Hallo nochmal,

habe den Fehler gefunden, beim copy und paste wurden nicht nur die ( " )-Zeichen sondern auch das ( ' ) falsch übernommen. Die SkriptEngine läuft jetzt super!

@ARadauer:
Thx a lot!!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
R Einfacher Taschenrechner mit Eclipse Java Basics - Anfänger-Themen 3
M Einfacher Taschenrechner Java Basics - Anfänger-Themen 2
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
W Taschenrechner mit Switch case Java Basics - Anfänger-Themen 4
W Taschenrechner Java Basics - Anfänger-Themen 11
A Taschenrechner mit Gui erstellen Java Basics - Anfänger-Themen 9
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
P Taschenrechner mit unendlich vielen Eingabemöglichkeiten Java Basics - Anfänger-Themen 1
V Erste Schritte Taschenrechner mit beliebig vielen Zahlen Java Basics - Anfänger-Themen 5
S Taschenrechner Java Basics - Anfänger-Themen 13
P Taschenrechner Text übertragung Java Basics - Anfänger-Themen 3
S Compiler-Fehler Basic- Taschenrechner/ Fehler Java Basics - Anfänger-Themen 8
S Basic- Taschenrechner? Java Basics - Anfänger-Themen 7
P Hilfe bei Java Taschenrechner Java Basics - Anfänger-Themen 25
F Erste Schritte Frage zu simplem Taschenrechner(switch) Java Basics - Anfänger-Themen 16
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
S Taschenrechner hilfe! Java Basics - Anfänger-Themen 17
H Java Taschenrechner Java Basics - Anfänger-Themen 4
R Variablen Taschenrechner mit Komfortfunktionen Java Basics - Anfänger-Themen 2
J RPN Taschenrechner - keine Lösung!! Java Basics - Anfänger-Themen 84
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
Q simpler Taschenrechner Java Basics - Anfänger-Themen 34
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
R Variablen Weitergehenderr Taschenrechner Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
M Java Taschenrechner Programmieren Java Basics - Anfänger-Themen 12
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
G Taschenrechner gibt nur 0.0 aus Java Basics - Anfänger-Themen 8
A Taschenrechner programmieren Java Basics - Anfänger-Themen 21
Z Java Taschenrechner Java Basics - Anfänger-Themen 6
J Kleiner Taschenrechner! Anfänger braucht Hilfe :( Java Basics - Anfänger-Themen 2
C Taschenrechner in Java Java Basics - Anfänger-Themen 6
J Erste Schritte Java CMD Taschenrechner mit Parametern! Java Basics - Anfänger-Themen 16
J Taschenrechner: Probleme Java Basics - Anfänger-Themen 5
E Taschenrechner problem! Ich komme nicht voran Java Basics - Anfänger-Themen 18
R Erste Schritte Taschenrechner mit Schleife Java Basics - Anfänger-Themen 24
Lord.Djerun (Taschenrechner Netbeans) Komma nur einmal schreiben & 0 ersetzen Java Basics - Anfänger-Themen 1
Z Taschenrechner - Additions/Substraktions/Multiplikations/Divionsketten! Java Basics - Anfänger-Themen 4
D Taschenrechner Frage Java Basics - Anfänger-Themen 12
Z Sehr simpler Taschenrechner - Hilfe! Java Basics - Anfänger-Themen 10
Z Taschenrechner - Wie addiere,multipliziere und subtrahiere ich? Java Basics - Anfänger-Themen 6
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
K Taschenrechner im GUI Java Basics - Anfänger-Themen 2
P Taschenrechner, operatoren Java Basics - Anfänger-Themen 4
D Simpler Taschenrechner Java Basics - Anfänger-Themen 6
A Anfänger Taschenrechner Frage Java Basics - Anfänger-Themen 14
R Erste Schritte Taschenrechner - Punkt-vor-Strich Rechnung Java Basics - Anfänger-Themen 1
S Operatoren Taschenrechner Ergebnis ausgeben Java Basics - Anfänger-Themen 7
A Taschenrechner zeigt Error Java Basics - Anfänger-Themen 7
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
M Taschenrechner fertigstellung Java Basics - Anfänger-Themen 1
N Methoden Taschenrechner Java Basics - Anfänger-Themen 2
F z = input.nextChar(); PROBLEM Taschenrechner Java Basics - Anfänger-Themen 7
J Scanner Taschenrechner? Java Basics - Anfänger-Themen 7
J Variablen Rechenzeichen und Zahlen verknüpfen für einen Taschenrechner Java Basics - Anfänger-Themen 17
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
B Erste Schritte Brauche Hilfe bei einem Java-Taschenrechner Java Basics - Anfänger-Themen 11
R Methoden Taschenrechner Java Basics - Anfänger-Themen 4
P Taschenrechner , IF-Abfrage Java Basics - Anfänger-Themen 12
I Taschenrechner - Methoden implementieren Java Basics - Anfänger-Themen 5
I Java Starthilfe (Taschenrechner) Java Basics - Anfänger-Themen 7
J Taschenrechner Problemchen Java Basics - Anfänger-Themen 3
D Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 11
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
J Taschenrechner Punkt vor Strich Java Basics - Anfänger-Themen 9
A Taschenrechner programmieren Java Basics - Anfänger-Themen 5
M Ausklappbares Fenster bei grafischem Taschenrechner Java Basics - Anfänger-Themen 2
M Dividieren bei Grafischem Taschenrechner klappt nicht Java Basics - Anfänger-Themen 2
N Taschenrechner mit Unterprogra Java Basics - Anfänger-Themen 6
C Taschenrechner Java Basics - Anfänger-Themen 12
Z Taschenrechner programmieren Java Basics - Anfänger-Themen 5
E Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 8
K Taschenrechner Java Basics - Anfänger-Themen 25
J Textfeld für Taschenrechner Java Basics - Anfänger-Themen 3
D Taschenrechner Java Basics - Anfänger-Themen 28
A Taschenrechner-GUI mit BorderLayout? Java Basics - Anfänger-Themen 6
W [PROJEKT] Simpler grafischer Taschenrechner Java Basics - Anfänger-Themen 8
M Taschenrechner mit JApplet Java Basics - Anfänger-Themen 26
J Grafischen Taschenrechner programmieren - Frage dazu Java Basics - Anfänger-Themen 12
W Taschenrechner Java Basics - Anfänger-Themen 2
T Tasten vom Taschenrechner? Java Basics - Anfänger-Themen 3
S Datentypen Taschenrechner Java Basics - Anfänger-Themen 13
J Taschenrechner Java Basics - Anfänger-Themen 5
J Taschenrechner Java Basics - Anfänger-Themen 9
M While bei einem Taschenrechner Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben