Tomorrow is the last day of University and I just have 1 lab left to submit which is my calculator, it's only worth 1%, but I've promised myself not to lose even 1% because I failed a paper last year by 1%, so I don't want that to happen again. There's 18 hours left to submit, so if someone could please help me it would be greatly appreciated. Thanks.
So the problem is, that it does the most basic of calculations of multiples, plus and minus, I haven't added division yet, that will come later. If I try 5 * 5 = 25 obviously, but if I try something like 5 * 5 * 5 = 25, it wipes the 1st 5 and calculates the 2nd and 3rd 5. Same thing goes for 5 + 5 + 5 = 10. I need it to be able to do equations like -3 + 5, 4 * 4 + 6, 3 * 2 - 5, etc etc.
import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.Scanner; public class CalculatorPanel extends JPanel{ private Calculator calc = new Calculator(); //an array of buttons displayed on the calculator private JButton[] digitButtons; //output display for the calculator private JTextField display = new JTextField(10); //main method - sets up JFrame public static void main(String[]args){ JFrame frame = new JFrame("Calculator"); frame.setContentPane(new CalculatorPanel()); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } //constructor -- builds a GUI for a calculator public CalculatorPanel(){ //create an array of button labels String[] buttonLabels = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "C", "0", "=", "+", "-", "*"}; //create an array of buttons digitButtons = new JButton[buttonLabels.length]; //create an actionListener ButtonListener listener = new ButtonListener(); // Create a 4 x 3 grid for placement of buttons. JPanel buttonGrid = new JPanel(); buttonGrid.setLayout(new GridLayout(5, 3)); //create a button with each button label, add it to buttonGrid, and register the button as a listener for (int nextBut = 0; nextBut < digitButtons.length; nextBut++){ digitButtons[nextBut] = new JButton(buttonLabels[nextBut]); buttonGrid.add(digitButtons[nextBut]); digitButtons[nextBut].addActionListener(listener); } //create a message for the user JLabel instruct = new JLabel("Press a button"); //add the components to this JPanel setLayout(new BorderLayout()); add(instruct, BorderLayout.NORTH); add(buttonGrid, BorderLayout.CENTER); add(display, BorderLayout.SOUTH); } //represents a listener for button presses private class ButtonListener implements ActionListener{ //what to do when a button has been pressed */ public void actionPerformed(ActionEvent aE){ JButton whichButton = (JButton) aE.getSource(); display.setText( whichButton.getText()); if ("+".equals(whichButton.getText())){ calc.inOperator("+"); }else if ("-".equals(whichButton.getText())){ calc.inOperator("-"); }else if ("*".equals(whichButton.getText())){ calc.inOperator("*"); }else if ("=".equals(whichButton.getText())){ calc.inEquals(); display.setText(calc.getResult()); }else if ("C".equals(whichButton.getText())){ calc.inClear(); display.setText("0"); }else{ long i = 0; Scanner scan = new Scanner(whichButton.getText()); i = scan.nextLong(); calc.inDigit(i); display.setText(calc.getCurrentInput()); } } } }
public class Calculator{ private long currentInput; //current input private long previousInput; // previous input private long result; // result of calculation private String lastOperator = ""; // keeps track of the last operator entered //new digit entered as integer value i - moves currentInput 1 decimal place to the left and adds i in "one's column" public void inDigit(long i){ currentInput = (currentInput * 10) + i; } //operator entered + - or * public void inOperator(String op){ previousInput = currentInput; // save the new input as previous to get ready for next input currentInput = 0; lastOperator = op; // remember which operator was entered } //equals operation sets result to previousInput + - or * currentInput (depending on lastOperator) public void inEquals(){ if (lastOperator.equals("+")){ result = previousInput + currentInput; } else if (lastOperator.equals("-")) { result = previousInput - currentInput; } else if (lastOperator.equals("*")) { result = previousInput * currentInput; } lastOperator = ""; // reset last operator to "nothing" } //clear operation public void inClear(){ currentInput = 0; previousInput = 0; result = 0; lastOperator = ""; } //returns the current result public String getResult(){ return Long.toString(result); //converts int to String } //returns the previous input value public String getPreviousInput(){ return Long.toString(previousInput); } //returns the current input value public String getCurrentInput(){ return Long.toString(currentInput); } }