Hallo Ihr lieben,
ich bin momentan in der Endphase meiner Studienarbeit. Die Aufgabe besteht darin, einen Funktionsplotter in Android zu realisieren. Mithilfe vom Shunting-Yard-Alogrithmus möchte ich die eingegebene Funktion in die Umgekehrte Polnische Notatoin überführen und dann mit verschiedenen x-Werten auswerten. Dazu möchte ich das Ergebnis des Shunting-Yards (also bei 5+3 bspw. 53+) in einem Textview ausgeben. Der Code sieht folgendermaßen aus:
Java
import java.util.*;
public class ShuntingYard {
private enum Operator {
ADD(1), SUBTRACT(2), MULTIPLY(3), DIVIDE(4);
final int precedence;
Operator(int p) { precedence = p; }
}
private Map<String, Operator> ops = new HashMap<String, Operator>() {{
put("+", Operator.ADD);
put("-", Operator.SUBTRACT);
put("*", Operator.MULTIPLY);
put("/", Operator.DIVIDE); }};
private boolean isHigerPrec(String op, String sub) {
return (ops.containsKey(sub) && ops.get(sub).precedence >= ops.get(op).precedence); }
public TextView RPN(View view) {
String Function = getIntent().getStringExtra("funktion");
StringBuilder output = new StringBuilder();
Deque<String> stack = new LinkedList<>();
for (String token : Function.split("\\s")) {
// operator
if (ops.containsKey(token)) {
while ( ! stack.isEmpty() && isHigerPrec(token, stack.peek()))
output.append(stack.pop()).append(' ');
stack.push(token);
// left parenthesis
}else if (token.equals("(")) {
stack.push(token);
// right parenthesis
} else if (token.equals(")")) {
while ( ! stack.peek().equals("("))
output.append(stack.pop()).append(' ');
stack.pop();
// digit
} else {
output.append(token).append(' ');
}
}
while ( ! stack.isEmpty())
output.append(stack.pop()).append(' ');
output.toString()
Output.setText(output)
return Output
}
}
Alles anzeigen
Leider erhalte ich als Ergebnis nur genau das eingegebene, nichts verändertes. Weiß jemand, woran das liegen könnte?