Taschenrechner Term rechnen

Funny77

Mitglied
Hallo,

ich bin jetzt echt am Ende mit meinen Java-Kenntnissen :(
Versuche schon den ganzen Nachmittag das irgendwie hinzukriegen und zwar hab ich einen Term und möchte diesen Zerlegen (hab ich auch schon)! Nur hab ich jetzt keinen Plan was ich mit der Ausgabe machen soll, weil da so verdammt viel rauskommt :lol:

Ich blick da leider echt nicht mehr durch! Vllt. kann ja mal jmd. einen kurzen Blick drauf werfen, weil es bestimmt voll einfach ist, ich es aber übersehe^^

Java:
public class Auswertung {
  public static void klammerZerlegung(String gesamt) {
    
    if (gesamt.contains("(") == true)
    {
      String[] teile = gesamt.split("\\(", 2);
      String[] teile2 = teile[1].split("\\)", 2);
      String[] teile3 = { "", "" };
      String[] teile4 = { "", "", "" };
      String mitte = "";
      if (teile2[0].contains("(") == false)
      {
        System.out.println(teile[0]+";"+teile2[0]+";"+teile2[1]);
        klammerZerlegung(teile2[0]);
        klammerZerlegung(teile2[1]);
        plusZerlegung(teile[0]);
      }
      else
      {
        int i = 0 ;
        while (teile2[0].contains("(") == true)
        {
          teile3 = teile2[0].split("\\(", 2);
          teile4 = teile2[1].split("\\)", 2);
          teile2[0] = teile3[1] + ")" + teile4[0];
          teile2[1] = teile4[1];
          if(i == 0)
          {
            mitte = teile3[0];
            
          }
          else
          {
            mitte = mitte + "(" + teile3[0];
          }
          i++;
          
        }
        
        mitte = mitte + "(" + teile2[0];
        
        System.out.println(teile[0] + ";" + mitte + ";" + teile2[1]);
        klammerZerlegung(mitte);
        klammerZerlegung(teile2[1]);
        plusZerlegung(teile[0]);
      }
    }
    else
    {
      System.out.println("" + ";" + gesamt + ";" + "");
      plusZerlegung(gesamt);
    }
  }
  
  public static void plusZerlegung(String gesamt)
  {
    if (gesamt.contains("+") == true)
    {
      
      String[] teile = gesamt.split("\\+", 2);
      System.out.println(teile[0] + ";" +teile[1]);
      plusZerlegung(teile[1]);
      minusZerlegung(teile[1]);
    }
    else
    {
      System.out.println(gesamt + ";" + "");
      minusZerlegung(gesamt);
    }
  }
  
  public static void minusZerlegung(String gesamt)
  {
    if (gesamt.contains("-") == true)
    {
      
      String[] teile = gesamt.split("\\-", 2);
      System.out.println(teile[0] + ";" +teile[1]);
      minusZerlegung(teile[1]);
      malZerlegung(teile[0]);
    }
    else
    {
      System.out.println(gesamt + ";" + "");
      malZerlegung(gesamt);
    }
  }
  
  public static void malZerlegung(String gesamt) {
    if (gesamt.contains("*") == true)
    {
      String[] teile = gesamt.split("\\*", 2);
      System.out.println(teile[0] + ";" +teile[1]);
      malZerlegung(teile[1]);
      geteiltZerlegung(teile[0]);
    }
    else
    {
      System.out.println(gesamt + ";" + "");
      geteiltZerlegung(gesamt);
    }
  }
  
  public static void geteiltZerlegung(String gesamt) {
    if (gesamt.contains("/") == true)
    {
      String[] teile = gesamt.split("\\/", 2);
      System.out.println(teile[0] + ";" +teile[1]);
      geteiltZerlegung(teile[1]);
    }
    else
    {
      System.out.println(gesamt + ";" + "");
    }
  }
}
Die Methode wird so aufgerufen:
Java:
Auswertung.klammerZerlegung(label_eingabe.getText());
thx
 
Zuletzt bearbeitet:
D

Dow Jones

Gast
Ach, eigentlich wird bei solchen Formelparsern auch nur mit ganz lauwarmem Wasser gekocht. Nimm dir mal zwei Stunden Zeit und lies das Tutorial von den Kollegen im C++-Forum, da wird das meiner Ansicht nach sehr schön erklärt.
 

DrZoidberg

Top Contributor
Nicht gleich aufgeben.
Versuchs erstmal ne Stufe einfacher.
Ein UPN(umgekehrte polnische notation) Taschenrechner ist so ziemlich das einfachste was man machen kann.
Umgekehrte Polnische Notation ? Wikipedia
Hier mal ein Beispiel
Code:
import java.util.ArrayDeque;
import java.util.ArrayList;

public class Calc {
    public static void main(String[] args) {
        ArrayList<Object> equ = parseExpr("3 4 + 2 7 * + x -");
        System.out.println(eval(equ, 3.0));
    }
    
    static ArrayList<Object> parseExpr(String expr) {
        String[] parts = expr.split(" ");
        ArrayList<Object> result = new ArrayList<Object>();
        for(String elem: parts) {
            try {
                Double num = Double.valueOf(elem);
                result.add(num);
            } catch(NumberFormatException e) {
                result.add(elem);
            }
        }
        return result;
    }
    
    static Double eval(ArrayList<Object> equation, Double x) {
        ArrayDeque<Double> stack = new ArrayDeque<Double>();
        for(Object elem: equation) {
            if(elem instanceof Double) {
                stack.push((Double)elem);
            } else {
                String str = (String)elem;
                if(str.equals("x")) stack.push(x);
                else if(str.equals("+")) stack.push(stack.pop() + stack.pop());
                else if(str.equals("-")) stack.push(-stack.pop() + stack.pop());
                else if(str.equals("*")) stack.push(stack.pop() * stack.pop());
                else if(str.equals("/")) stack.push(1/stack.pop() * stack.pop());
                else if(str.equals("sin")) stack.push(Math.sin(stack.pop()));
                else if(str.equals("cos")) stack.push(Math.cos(stack.pop()));
            }
        }
        return stack.pop();
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Klammerberechnungen bei einem Taschenrechner Allgemeine Java-Themen 2
Lord.Djerun (Taschenrechner) jButtons mit gleicher Funktion zusammenfassen Allgemeine Java-Themen 6
A Swing Taschenrechner while Schlaufe Allgemeine Java-Themen 12
S Taschenrechner Allgemeine Java-Themen 3
J Best Practice Parser für Taschenrechner Allgemeine Java-Themen 4
Z Taschenrechner größere Eingabe Allgemeine Java-Themen 3
H Taschenrechner mit neuem Datentyp Allgemeine Java-Themen 16
M Konsolenprogramm(Taschenrechner)! Allgemeine Java-Themen 6
S ein taschenrechner, aber etwas anders. Allgemeine Java-Themen 2
E einfacher taschenrechner Allgemeine Java-Themen 5
1 taschenrechner Allgemeine Java-Themen 11
S Taschenrechner und Programmierung Allgemeine Java-Themen 4
N Modellierung - Mathematischer Term Allgemeine Java-Themen 7
R Baumstruktur aus Term Allgemeine Java-Themen 34
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
Mikejr Recursion mit Zinseszins rechnen Allgemeine Java-Themen 20
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
KeexZDeveoper Schnelleres Rechnen Allgemeine Java-Themen 8
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
J zu blöd zum rechnen Allgemeine Java-Themen 7
S Java rechnen mit unbekannten Allgemeine Java-Themen 11
M Rechnen mit kleinen Zahlen langsamer!? Allgemeine Java-Themen 11
B Fehler beim Rechnen mit Floats Allgemeine Java-Themen 3
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
M In einer Tabelle rechnen Allgemeine Java-Themen 12
H Mit String rechnen Allgemeine Java-Themen 14
hdi Probleme beim Rechnen mit BigDecimal Allgemeine Java-Themen 5
E Konstante Zahl Threads parallel rechnen lassen Allgemeine Java-Themen 6
O "Rechnen" mit Farben Allgemeine Java-Themen 12
T Mit Datum und Zeit rechnen Allgemeine Java-Themen 8
M Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 8
G Probleme mir Rechnen Allgemeine Java-Themen 5
P rechnen mit extrem grossen zahlen Allgemeine Java-Themen 2
H Komplexes Rechnen mit Java Allgemeine Java-Themen 6
S Rechnen mit float Zahlen Allgemeine Java-Themen 2
O Java zu blöde um 1-1 zu rechnen?? Allgemeine Java-Themen 20

Ähnliche Java Themen

Neue Themen


Oben