Note that there are some explanatory texts on larger screens.

plurals
  1. POAlgorithm and Hint for Scientific Calculator
    text
    copied!<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>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload