Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich schreib gerade ein programm wo ich zahlen und operatoren in ein feld schreibe. um nachher etwas zu berechnen möche ich die zahlen und operatoren herauslesen, doch man kann ja ein Object nicht in einen int parsen.
das ganze programm soll dann ein UPN-Rechner werden(Ungarischer Rechner mit Polnischer Notation)
hi nadal, wir ham sowas mal als klausuraufgabe gehabt:
Code:
import java.util.Stack;
public class Parser {
/**
* Wandelt den uebergebenen Infix- in einen Postfix-Ausdruck um.
* Unterstuetzt werden die Operatoren +, *, /, -. Es sind nur
* einstellige Zahlen im Ausdruck erlaubt. Eine Fehlerbehandlung findet
* nicht statt.
* @param infix Infixausdruck.
* @return Postfixausdruck.
*/
public String convert(String infix) {
String result = "";
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < infix.length(); i++) {
switch (infix.charAt(i)) {
case '+':
case '*':
case '-':
case '/':
stack.push(infix.charAt(i));
break;
case '(':
break;
case ')':
result += stack.pop();
break;
case ' ':
break;
default:
result += infix.charAt(i);
}
}
result += stack.pop();
return result;
}
/**
* Wertet den uebergebenen Postfix-Ausdruck aus und liefert das Ergebnis
* der Berechnung zurueck. Unterstuetzt werden die Operatoren +, *, /, -.
* Es sind nur einstellige Zahlen im Ausdruck erlaubt. Eine
* Fehlerbehandlung findet nicht statt.
* @param postfix Postfixausdruck.
* @return Ergebnis der Auswertung.
*/
public int evaluate(String postfix) {
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i < postfix.length(); i++) {
if (!Character.isDigit(postfix.charAt(i))) {
int arg2 = stack.pop();
int arg1 = stack.pop();
switch (postfix.charAt(i)) {
case '*':
stack.push(arg1 * arg2);
break;
case '+':
stack.push(arg1 + arg2);
break;
case '-':
stack.push(arg1 - arg2);
break;
case '/':
stack.push(arg1 / arg2);
break;
}
} else {
// postfix.charAt(i) - '0' waere auch ok
stack.push(new Integer(postfix.substring(i, i + 1)));
}
}
return stack.pop();
}
public static void main(String[] args) {
Parser parser = new Parser();
String infix = "5 * (((9 + 8) * (6 - 4)) + 7)";
String postfix = parser.convert(infix);
System.out.println(infix + " = " /*+ postfix + " = " */+ parser.evaluate(postfix));
}
}
funktionieren tut der spaß aber nur mit einstelligen integers, hab des einfach mal aus der lösung (die mittlerweile online ist) kopiert und getestet.
// edit: warum zum geier sind die tabs so scheiße? habs zwar aus ner pdf kopiert aber per hand jede zeile eingerückt in eclipse...