hi nochmal,
wiess nicht wieso aber mein Theman wurde gelöst. Denke wegen Doppelpost,sorry )
Im Kommentar sind meine Problemstellen hinterlägt.
wiess nicht wieso aber mein Theman wurde gelöst. Denke wegen Doppelpost,sorry )
Im Kommentar sind meine Problemstellen hinterlägt.
Java:
import java.util.LinkedList;
import java.util.List;
public class Expressions {
private Expressions() {
}
// Ausdrucksbaeume
public interface Expression {
int evaluate();
}
public static abstract class ComplexExpression implements Expression {
private Expression x;//
private Expression y;
public ComplexExpression(Expression x, Expression y) {
this.x = x;
this.y = y;
}
protected Expression getx() {
return x;
}
protected Expression gety() {
return y;
}
}
public static class Const implements Expression {
private int y;
public Const(int y) {
this.y = y;
}
@Override
public int evaluate() {
return y;
}
}
public static class Add extends ComplexExpression {
public Add(Expression x, Expression y) {
super(x, y);
}
@Override
public int evaluate() {
return getx().evaluate() + gety().evaluate();
}
}
public static class Sub extends ComplexExpression {
public Sub(Expression x, Expression y) {
super(x, y);
}
@Override
public int evaluate() {
return getx().evaluate() - gety().evaluate();
}
}
public static class Div extends ComplexExpression {
public Div(Expression x, Expression y) {
super(x, y);// höhers Objekt zugreifen
}
@Override
public int evaluate() {
if (getx().evaluate() == 0) {
System.out.println("division durch 0");
}
return getx().evaluate() / gety().evaluate();
}
}
public static class Mult extends ComplexExpression {
public Mult(Expression x, Expression y) {
super(x, y);
}
@Override
public int evaluate() {
return getx().evaluate() * gety().evaluate();
}
}
private static class ToPostfix {
private int pos = 0;
private List<Expression> result = new LinkedList<>();
public ToPostfix(String expression) {
parseToPostfix(expression);
}
public List<Expression> get() {
return result;
}
// ein paar keine Anpassungen hier
private void parseToPostfix(String expr) {
if (istZiffer(expr.charAt(pos))) {
result.add(new Const(expr.charAt(pos) - '0'));// das ist doch
// ein Integer
// wieso hier
// char?
++pos;
// zB. (2+2)
} else if (expr.charAt(pos) == '(') {
char op;
++pos;
parseToPostfix(expr);
//hier mein Problem
// ....
// ....
op = expr.charAt(pos);
++pos;
parseToPostfix(expr);// rekusion ziffer zuerst 2,6
++pos; // ’)’
} else {
}
}
private static boolean istZiffer(char c) {
return (c >= '0' && c <= '9');
}
}
// Liefert eine PostfixDarstellung des Ausdrucks
public static List<Expression> toPostfix(String expression) {
return new ToPostfix(expression).get();
}
public static void main(String[] agrs) {
System.out.println(toPostfix("((2+6)/(3*4)))")); // -->> [2, 6, +, 3, 4,
// *, /]
System.out.println("((2+6)/(3*4)))");
}