title: Algorithm and Hint for Scientific Calculator
body: <p>I have a Scientific Calculator project using Java Swing. but, I ended up in wrong calculation. Example: If push button:</p>
  
  <p>1 then + then 2 then  * then 3 the answer is 9, not 7.</p>
  
  <p>Could you give me a hint, I must use what classes? And how about the algorithm to make it right answer?</p>
  
  <p>Thank you</p>
  
  <pre><code>class Calculator{
      public static void main(String[] args){
          EventQueue.invokeLater(new Runnable(){
              public void run(){
                  CalculatorFrame frame = new CalculatorFrame();
                      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                      frame.setVisible(true);
                  }
              }
          );
      }
  }
  
  
  class CalculatorFrame extends JFrame{
      public CalculatorFrame(){
      setTitle("Calculator");
      CalculatorPanel panel = new CalculatorPanel();
      add(panel);
      pack();
      }
  }
  
  
  class CalculatorPanel extends JPanel{
      public CalculatorPanel(){
          setLayout(new BorderLayout());
          result = 0;
          lastCommand = "=";
          start = true;
          // add the display
          display = new JButton("");
          display.setEnabled(false);
          add(display, BorderLayout.NORTH);
          ActionListener insert = new InsertAction();
          ActionListener command = new CommandAction();
          // add the buttons in a  x  grid
          panel = new JPanel();
          panel.setLayout(new GridLayout(4,4 ));
          addButton("7", insert);
          addButton("8", insert);
          addButton("9", insert);
          addButton("/", command);
  
          addButton("4", insert);
          addButton("5", insert);
          addButton("6", insert);
          addButton("*", command);
  
          addButton("1", insert);
          addButton("2", insert);
          addButton("3", insert);
          addButton("-", command);
          addButton("0", insert);
          addButton(".", insert);
          addButton("=", command);
          addButton("+", command);
          add(panel, BorderLayout.CENTER);
      }
  
      private void addButton(String label, ActionListener listener){
          JButton button = new JButton(label);
          button.addActionListener(listener);
          panel.add(button);
      }
  
      private class InsertAction implements ActionListener{
          public void actionPerformed(ActionEvent event){
              String input = event.getActionCommand();
              if (start){
                  display.setText("");
                  start = false;
              }
              display.setText(display.getText() + input);
          }
      }
  
  
      private class CommandAction implements ActionListener{
          public void actionPerformed(ActionEvent event) {
              String command = event.getActionCommand();
  
              if (start){
                  if (command.equals("-")){
                  display.setText(command);
                  start = false;
                  }
                  else lastCommand = command;
              }
              else{
                  calculate(Double.parseDouble(display.getText()));
                  lastCommand = command;
                  start = true;
              }
          }
      }
  
  
      public void calculate(double x){
          if (lastCommand.equals("+")) result += x;
          else if (lastCommand.equals("-")) result -= x;
          else if (lastCommand.equals("*")) result *= x;
          else if (lastCommand.equals("/")) result /= x;
          else if (lastCommand.equals("=")) result = x;
          display.setText("" + result);
      }
  
      private JButton display;
      private JPanel panel;
      private double result;
      private String lastCommand;
      private boolean start;
  }
  </code></pre>