The Calculator Methods

=javascript import java.awt.*; import java.io.*; import java.util.Stack; class Calculate2 { private Stack operatoren_Stack; private Stack operanden_Stack; private float store; private String lastButton; private int pointPressed=0; //Konstructor public Calculate2() { operanden_Stack = new Stack(); operatoren_Stack = new Stack(); } //testet, ob gleich weitergerechnet werden kann, oder nicht public void calcTest(char operator) { if (priorCheck(operator)){ doOperation(); calcTest(operator); } else operatoren_Stack.push(new Character(operator)); } public void div(String display) { if (opButtonTest(get_lastButton())) operatorChange('/'); else { operandenPush((Float.valueOf(display)).floatValue()); //schmeisst den Zahlenwert auf dem Display auf den operanden_Stack calcTest('/'); } set_lastButton("div"); set_pointPressed(0); } //führt die eigentliche Rechenoperation aus private void doOperation() { float operand1 = ((Float)operanden_Stack.pop()).floatValue(); float operand2 = ((Float)operanden_Stack.pop()).floatValue(); //holt den ersten und zweiten operanden (von oben) aus dem operanden_Stack char operator = ((Character)operatoren_Stack.pop()).charValue(); //holt den obersten operator aus dem operatoren_Stack float ergebnis; switch(operator){ case '+': ergebnis = operand1 + operand2; break; case '-': ergebnis = operand2 - operand1; break; case '*': ergebnis = operand1 * operand2; break; case '/': try{ ergebnis = operand2 / operand1; break; } catch(ArithmeticException e){} default : ergebnis = 0; } operanden_Stack.push(new Float(ergebnis)); } public String get_lastButton() { //gibt den zuletzt gedrueckten Button aus return lastButton; } public int get_pointPressed() { //gibt je nachdem, ob ein Punkt eingegeben wurde oder nicht 0 bzw 1 aus return pointPressed; } // Verteilt verschiedene Prioritäten auf verschiedene operatoren private int getPrior(char operator) { if((operator == '+')||(operator == '-')) return 1; else return 2; } public void minus(String display) { if (opButtonTest(get_lastButton())) operatorChange('-'); //wenn vorher ein Operator gedrückt wurde werden die Operatoren auf dem Stack getauscht else { operandenPush((Float.valueOf(display)).floatValue()); //schmeißt den Zahlenwert auf dem Display auf den operanden_Stack //wenn driekt vorher schon ein Operator gedrückt wurde, ist dies schon geschehen calcTest('-'); } set_lastButton("minus"); set_pointPressed(0); } public void mtStacks() { //leert beide Stacks if (!operatoren_Stack.isEmpty()) for (int i=0; i<=operatoren_Stack.size();i++) operatoren_Stack.pop(); if (!operanden_Stack.isEmpty()) for (int i=0; i<=operanden_Stack.size();i++) operanden_Stack.pop(); } public void mult(String display) { if (opButtonTest(get_lastButton())) operatorChange('*'); else { operandenPush((Float.valueOf(display)).floatValue()); //schmeisst den Zahlenwert auf dem Display auf den operanden_Stack calcTest('*'); } set_lastButton("mult"); set_pointPressed(0); } public boolean opButtonTest(String but) { //prueft, ob ein operatoren Button gedrueckt wurde if ((but=="plus")||(but=="minus")||(but=="div")||(but=="mult"))return true; else return false; } public float operandenPeek() { //zeigt den ersten operanden vom operanden_Stack (entfernt ihn nicht) return ((Float)operanden_Stack.peek()).floatValue(); } public float operandenPop(){ //holt den ersten operanden vom operanden_Stack return ((Float)operanden_Stack.pop()).floatValue(); } public void operandenPush(float operand) { //schmeißt einen neuen operanden oben auf den operanden_Stack operanden_Stack.push(new Float (operand)); } public void operatorChange(char operator) { //vertauscht den obersten Operator vom Stack mit operator operatoren_Stack.pop(); calcTest(operator); } public char operatorenPeek() { //zeigt den ersten operator vom operatoren_Stack return (((Character)operatoren_Stack.peek()).charValue()); } public void operatorenPop() { //holt den ersten operator vom operatoren_Stack if (!(operatoren_Stack.isEmpty())) operatoren_Stack.pop(); } public void plus(String display) { if (opButtonTest(get_lastButton())) operatorChange('+'); else{ operandenPush((Float.valueOf(display)).floatValue()); //schmeisst den Zahlenwert auf dem Display auf den operanden_Stack calcTest('+'); } set_lastButton("plus"); set_pointPressed(0); } public String print_operandenStack() { //gibt den operanden_Stack als String zurueck return operanden_Stack.toString(); } public String print_operatorenStack() { //gibt den operatoren_Stack als String zurueck return operatoren_Stack.toString(); } private boolean priorCheck(char operator) { //liefert true, wenn der operator(der noch nicht im Stack steht)größer ist als der oberste operator im Stack. if (!operatoren_Stack.empty()) return ((getPrior(operator)) <= (getPrior(((Character)operatoren_Stack.peek()).charValue()))); else return false; } public void set_lastButton(String name) { //aendert den lastButton lastButton=name; } public void set_pointPressed(int i) { //aendert die pointPressed Varriable pointPressed=i; } public void stack_abarbeiten(){ if(!operatoren_Stack.empty()){ doOperation(); stack_abarbeiten(); } } public void store_in(float operand){ store = operand; } public float store_out(){ return store; } public boolean zahlButtonTest(String but) { //prueft, ob ein Zahlenbutton gedrueckt wurde if ((but=="one")||(but=="two")||(but=="three")||(but=="four")||(but=="five")||(but=="six")||(but=="seven")||(but=="eight")||(but=="nine")||(but=="zero")) return true; else return false; } }

The Interface

=javascript import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Calc_App2 extends Applet implements ActionListener { private Button one = new Button("1"); private Button two = new Button("2"); private Button three = new Button("3"); private Button four = new Button("4"); private Button five = new Button("5"); private Button six = new Button("6"); private Button seven = new Button("7"); private Button eight = new Button("8"); private Button nine = new Button("9"); private Button zero = new Button("0"); private Button plus = new Button("+"); private Button minus = new Button("-"); private Button mult = new Button("*"); private Button div = new Button("/"); private Button equal = new Button("="); private Button m_in = new Button("M_in"); private Button m_out = new Button("M_out"); private Button point = new Button("."); private Button c = new Button("C"); private Button ac = new Button("AC"); private TextField ausgabe = new TextField(20); private TextField stack1=new TextField(20); private TextField stack2=new TextField(20); private TextField test = new TextField(); private float store; private Calculate2 calcu = new Calculate2(); private Object lastButton; private int point_pressed=0; Label st=new Label("Stacks: "); public void actionPerformed(ActionEvent ae) { Object quelle = ae.getSource(); String display = ausgabe.getText(); if (quelle == one){ if (displayTest()==true) output_plus("1"); //wenn der zuletzt gedrckte Button nicht operator war, //und das Display nicht auf 0 zeigt wird zum display eine 1 hinzugefuegt else ausgabe.setText("1"); // sonst wird eine einzelne 1 ausgegeben. calcu.set_lastButton("one"); // lastButton wird veraendert } if (quelle == two){ if (displayTest()==true) output_plus("2"); else ausgabe.setText("2"); calcu.set_lastButton("two"); } if (quelle == three){ if (displayTest()==true) output_plus("3"); else ausgabe.setText("3"); calcu.set_lastButton("three"); } if (quelle == four){ if (displayTest()==true) output_plus("4"); else ausgabe.setText("4"); calcu.set_lastButton("four"); } if (quelle == five){ if (displayTest()==true) output_plus("5"); else ausgabe.setText("5"); calcu.set_lastButton("five"); } if (quelle == six){ if (displayTest()==true) output_plus("6"); else ausgabe.setText("6"); calcu.set_lastButton("six"); } if (quelle == seven){ if (displayTest()==true) output_plus("7"); else ausgabe.setText("7"); calcu.set_lastButton("seven"); } if (quelle == eight){ if (displayTest()==true) output_plus("8"); else ausgabe.setText("8"); calcu.set_lastButton("eight"); } if (quelle == nine){ if (displayTest()==true) output_plus("9"); else ausgabe.setText("9"); calcu.set_lastButton("nine"); } if (quelle == zero){ if (displayTest()==true) output_plus("0"); else ausgabe.setText("0"); calcu.set_lastButton("zero"); } if (quelle == minus){ calcu.minus(display); ausgabe.setText((Float.toString(calcu.operandenPeek()))); stack1.setText(calcu.print_operandenStack()); stack2.setText(calcu.print_operatorenStack()); } if (quelle == plus){ calcu.plus(display); ausgabe.setText((Float.toString(calcu.operandenPeek()))); stack1.setText(calcu.print_operandenStack()); stack2.setText(calcu.print_operatorenStack()); } if (quelle == mult){ calcu.mult(display); ausgabe.setText((Float.toString(calcu.operandenPeek()))); stack1.setText(calcu.print_operandenStack()); stack2.setText(calcu.print_operatorenStack()); } if (quelle == equal){ if ((calcu.zahlButtonTest(calcu.get_lastButton())) || (calcu.get_lastButton()=="m_out") || (calcu.get_lastButton()=="mi")){ calcu.operandenPush((Float.valueOf(display)).floatValue()); calcu.stack_abarbeiten(); ausgabe.setText((Float.toString(calcu.operandenPeek()))); } if (calcu.opButtonTest(calcu.get_lastButton())){ calcu.operatorenPop(); calcu.stack_abarbeiten(); ausgabe.setText((Float.toString(calcu.operandenPeek()))); } calcu.operandenPop(); //damit der Stack wieder leer ist; calcu.set_pointPressed(0); calcu.set_lastButton("eq"); stack1.setText(calcu.print_operandenStack()); stack2.setText(calcu.print_operatorenStack()); } if (quelle == div){ calcu.div(display); ausgabe.setText((Float.toString(calcu.operandenPeek()))); stack1.setText(calcu.print_operandenStack()); stack2.setText(calcu.print_operatorenStack()); } if (quelle == c){ // die letzte Zahl im Display wird gelöscht if (calcu.zahlButtonTest(calcu.get_lastButton())) ausgabe.setText("0"); calcu.set_pointPressed(0); calcu.set_lastButton("c"); } if (quelle == ac){ calcu.mtStacks(); ausgabe.setText("0"); stack1.setText(calcu.print_operandenStack()); stack2.setText(calcu.print_operatorenStack()); calcu.set_pointPressed(0); calcu.set_lastButton("null"); } if (quelle == point){ if (calcu.get_pointPressed()==0){ calcu.set_pointPressed(1); //wenn vorher keine Zahl gedrückt wurde wird eine Null angenommen if (!calcu.zahlButtonTest(calcu.get_lastButton())) ausgabe.setText("0."); else ausgabe.setText(display + "."); } calcu.set_lastButton("point"); } if (quelle == m_in){ calcu.store_in(Float.valueOf(ausgabe.getText()).floatValue()); calcu.set_lastButton("mi"); } if (quelle == m_out){ ausgabe.setText(Float.toString(calcu.store_out())); calcu.set_lastButton("m_out"); } } public boolean displayTest(){ if ((calcu.zahlButtonTest(calcu.get_lastButton())==true)||(calcu.get_lastButton()=="point")) return true; else return false; } public void init(){ ac.setBackground(new Color(168,0,0)); ac.setForeground(new Color(255,255,255)); c.setBackground(new Color(168,0,0)); c.setForeground(new Color(255,255,255)); one.setBackground(new Color(21,39,142)); one.setForeground(new Color(255,255,255)); two.setBackground(new Color(21,39,142)); two.setForeground(new Color(255,255,255)); three.setBackground(new Color(21,39,142)); three.setForeground(new Color(255,255,255)); four.setBackground(new Color(21,39,142)); four.setForeground(new Color(255,255,255)); five.setBackground(new Color(21,39,142)); five.setForeground(new Color(255,255,255)); six.setBackground(new Color(21,39,142)); six.setForeground(new Color(255,255,255)); seven.setBackground(new Color(21,39,142)); seven.setForeground(new Color(255,255,255)); eight.setBackground(new Color(21,39,142)); eight.setForeground(new Color(255,255,255)); nine.setBackground(new Color(21,39,142)); nine.setForeground(new Color(255,255,255)); zero.setBackground(new Color(21,39,142)); zero.setForeground(new Color(255,255,255)); point.setForeground(new Color(255,255,255)); point.setBackground(new Color(21,39,142)); equal.setForeground(new Color(255,255,255)); equal.setBackground(new Color(21,39,142)); m_in.setBackground(new Color(255,205,5)); m_out.setBackground(new Color(255,205,5)); plus.setBackground(new Color(44,160,44)); plus.setForeground(new Color(255,255,255)); minus.setBackground(new Color(44,160,44)); minus.setForeground(new Color(255,255,255)); mult.setBackground(new Color(44,160,44)); mult.setForeground(new Color(255,255,255)); div.setBackground(new Color(44,160,44)); div.setForeground(new Color(255,255,255)); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); setLayout(gridbag); Panel buttonPanel = new Panel(); buttonPanel.setLayout(new GridLayout(6,3,4,4)); //Größe des buttonPanels //4 Anzahl der Pixel zwischen den Zellen // 6 Zeilen, 4 Spalten buttonPanel.add(m_in); m_in.addActionListener(this); buttonPanel.add(m_out); m_out.addActionListener(this); buttonPanel.add(c); c.addActionListener(this); buttonPanel.add(ac); ac.addActionListener(this); buttonPanel.add(seven); seven.addActionListener(this); buttonPanel.add(eight); eight.addActionListener(this); buttonPanel.add(nine); nine.addActionListener(this); buttonPanel.add(plus); plus.addActionListener(this); buttonPanel.add(four); four.addActionListener(this); buttonPanel.add(five); five.addActionListener(this); buttonPanel.add(six); six.addActionListener(this); buttonPanel.add(minus); minus.addActionListener(this); buttonPanel.add(one); one.addActionListener(this); buttonPanel.add(two); two.addActionListener(this); buttonPanel.add(three); three.addActionListener(this); buttonPanel.add(mult); mult.addActionListener(this); buttonPanel.add(zero); zero.addActionListener(this); buttonPanel.add(point); point.addActionListener(this); buttonPanel.add(equal); equal.addActionListener(this); buttonPanel.add(div); div.addActionListener(this); buttonPanel.add(div); div.addActionListener(this); ausgabe.setEditable(false); gbc.gridwidth = GridBagConstraints.REMAINDER; //Ausgabefeld steht über dem buttonPanel gbc.anchor = GridBagConstraints.NORTH; gbc.fill = GridBagConstraints.BOTH; //Ausgabefeld schließt zu beiden Seiten mit dem buttonPanel ab add(ausgabe,gbc); //Textfeld wird hinzugefuegt add(buttonPanel,gbc); //hinzufügen des buttonPanels add(st,gbc); add(stack1,gbc); add(stack2,gbc); } public void output_plus(String what){ if (!(ausgabe.getText().length()>=9)) ausgabe.setText(ausgabe.getText()+what); } }