Hey everybody! So my problem is the very last part, getting the results of my calculation. So what i've done is created a stack with my very own stack class. The = button is suppose to display the result but i get a runtime error. Please help me out. Oh i also created an array of chars. I used those chars and placed it into a method so that way i can get the results.
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.util.Stack; /** * * @author Giovanni M */ public class JCalculator implements ActionListener { JFrame jfrm; JFrame jfrm2; JTextField txt; JLabel results; String str= ""; Stack operands = new Stack(); JCalculator(){ jfrm = new JFrame("JCalc"); jfrm.getContentPane().setLayout(new GridLayout(0,1)); jfrm.setSize(210,210); results = new JLabel("",SwingConstants.RIGHT); jfrm.getContentPane().add(results); jfrm.setLocation(400,300); jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton[] calbut= new JButton[14]; String []but = {"7","8","9","/","4","5","6","*","1","2","3","-","0","C" }; JButton equal = new JButton("="); JButton add = new JButton("+"); JPanel jbutton = new JPanel(); jbutton.setLayout(new GridLayout(4,3)); for(int i=0; i< but.length;i++){ jbutton.add(calbut[i] = new JButton(but[i])); //jfrm.getContentPane().add(calbut[i]); calbut[i].addActionListener(this); } jbutton.add(equal); jbutton.add(add); equal.addActionListener(this); add.addActionListener(this); jfrm.getContentPane().add(jbutton); /*JMenu j = new JMenu ("C",KeyEvent.VK_C); j.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));*/ jfrm.setVisible(true); } public void actionPerformed(ActionEvent ae){ char[] a = new char[0]; int used = 0; if(used == a.length){ char[] newa= new char[a.length + 1]; for(int i = 0; i <used; i++) newa[i]= a[i]; a= newa; } if(ae.getActionCommand().equals("1")){ str = results.getText(); results.setText(str + "1"); } if(ae.getActionCommand().equals("2")){ str = results.getText(); results.setText(str + "2"); } if(ae.getActionCommand().equals("3")){ str = results.getText(); results.setText(str + "3"); } if(ae.getActionCommand().equals("4")){ str = results.getText(); results.setText(str + "4"); } if(ae.getActionCommand().equals("5")){ str = results.getText(); results.setText(str + "5"); } if(ae.getActionCommand().equals("6")){ str = results.getText(); results.setText(str + "6"); } if(ae.getActionCommand().equals("7")){ str = results.getText(); results.setText(str + "7"); } if(ae.getActionCommand().equals("8")){ str = results.getText(); results.setText(str + "8"); } if(ae.getActionCommand().equals("9")){ str = results.getText(); results.setText(str + "9"); } if(ae.getActionCommand().equals("0")){ str = results.getText(); results.setText(str + "0"); //operands.push(0); } if(ae.getActionCommand().equals("+")){ str = results.getText(); double operand = Double.parseDouble(str); operands.push(operand); results.setText(""); a[used]= '+'; used++; } if(ae.getActionCommand().equals("-")){ str = results.getText(); double operand = Double.parseDouble(str); operands.push(operand); results.setText(""); a[used]= '+'; used++; } if(ae.getActionCommand().equals("/")){ str = results.getText(); double operand = Double.parseDouble(str); operands.push(operand); results.setText(""); a[used]= '+'; used++; } if(ae.getActionCommand().equals("*")){ str = results.getText(); double operand = Double.parseDouble(str); operands.push(operand); results.setText(""); a[used]= '*'; used++; } if(ae.getActionCommand().equals("=")){ for(int i = 0; i< used; i++){ performBinaryOp(a[i]); } str = (String) operands.pop(); results.setText(str); } } public void performBinaryOp(char nextOperation) { double leftOperand, rightOperand; Double result = new Double(0); rightOperand = (double) operands.pop(); leftOperand = (double)operands.pop(); switch (nextOperation) { case '+': result = new Double(leftOperand + rightOperand); break; case '-': result = new Double(leftOperand - rightOperand); break; case '*': result = new Double(leftOperand * rightOperand); break; case '/': result = new Double(leftOperand / rightOperand); break; } operands.push(result); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new JCalculator(); } }); } }
well could you elaborate on the error you are getting? expected outcome and the actual outcome of the app
DavidKroukamp
Practically a Master Poster
Team Colleague
693 posts since Dec 2011
Reputation Points: 282
Solved Threads: 169