Dies ist eine alte Version des Dokuments!
public class InfixCalculation{ private String rechnung; // die vollständige Rechnung private int pos; // Position des nächsten Zeichens private char aktuell; // das aktuelle Zeichen // Stellt einen gewöhnlichen Infix-Ausdruck mit den vier // Grundrechenarten und Klammern dar, z.B. 3*(-(2+4)) public InfixCalculation(String rechnung){ this.rechnung=rechnung+"_";//hinten ein Stopzeichen } // Rechnet einmal durch public double berechne(){ pos=0; weiter(); return summe(); } private void weiter(){ aktuell=rechnung.charAt(pos++); } private boolean ziffer() { return aktuell>='0' && aktuell<='9'; } private double zahl(){ double zahl = 0.0; double kommazahl = 0.0; double potenz = 1.0; while (ziffer()) { zahl *= 10; zahl += Character.getNumericValue(aktuell); weiter(); } if(aktuell=='.'){ weiter(); while (ziffer()) { potenz *= 10; kommazahl += Character.getNumericValue(aktuell)/potenz; weiter(); } } System.out.println(zahl+kommazahl); return zahl+kommazahl; } // TERM --> ZAHL | (SUMME) private double term(){ double term = 1.0; if(ziffer()) { term = zahl(); } if(aktuell=='(') { weiter(); term = summe(); } return term; } // PRODUKT --> TERM | TERM*TERM* ... | TERM/TERM/ ... // | (auch * und / gemischt) private double produkt(){ double produkt = 1.0; // Unsinn, aber compilierbar. if(ziffer()||aktuell=='(') { produkt = term(); } if(aktuell=='*') { weiter(); produkt = produkt*produkt(); } if(aktuell=='/') { weiter(); produkt = produkt/produkt(); } return produkt; } // SUMME --> +PRODUKT | -PRODUKT (evtl. führende Vorzeichen) // | PRODUKT // | PRODUKT+PRODUKT+ ... // | PRODUKT-PRODUKT- ... // | (auch + und - gemischt) private double summe(){ double summe = 0.0; if(ziffer()||aktuell=='(') { summe += produkt(); } if(aktuell=='+') { weiter(); summe += summe(); } if(aktuell=='-') { weiter(); summe -= summe(); } if(aktuell==')') weiter(); return summe; } public static void main(String[] args) { String lese = "3.2*(4.1-0.6)"; System.out.println("Tip: java InfixCalculation"+lese); InfixCalculation calc=new InfixCalculation(lese); System.out.println(lese +" = "+calc.berechne()); } }