Taschenrechnerzeile umsetzten (Wie Windowstaschenrechner)

J /-\ \/ /-\

Mitglied
Hallöchen :)

Kann ich mal bitte ein paar Denkanstöße kriegen, wie man es umsetzten könnte eine Eingabezeile für einen Taschenrechner ähmlich des windowstaschenrechners zu machen ?
(Konsolenprogramm)

Also man gibt ein 5*2-3*7 und er rechnet das Ergebnis aus.
Würde mich über Denkanstöße freuen =)
 

DrZoidberg

Top Contributor
Übrigens.
Die mit Abstand einfachste Art von Taschenrechner ist ein UPN(umgekehrte polnische notation) Taschenrechner.
Umgekehrte Polnische Notation ? Wikipedia

bsp.
Java:
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();
    }
}

Wenn man da noch eine Methode hinzufügt um eine Gleichung in Normalform in die UPN Form umzuwandeln hat man auch ein komplettes Taschenrechnerprogramm.
 

Neue Themen


Oben