New to programming, so please, go easy.
Im working on a calculator app for class. I have to set up the addition, subtraction, multiplication and division methods.
package part1.code;
import part1.user_interface.CalculatorUI;
public class Calculator {
private static final int BASE = 10;
private int _value;
private int _va;
private CalculatorUI _ui;
public Calculator(CalculatorUI calculatorUI) {
_ui = calculatorUI;
_value = 0;
}
public void digit_0_keyPressed() {
_value = _value * BASE + 0;
_ui.updateDisplay();
}
public void digit_1_keyPressed() {
_value = _value * BASE + 1;
_ui.updateDisplay();
}
public void digit_2_keyPressed() {
_value = _value * BASE + 2;
_ui.updateDisplay();
}
public void digit_3_keyPressed() {
_value = _value * BASE + 3;
_ui.updateDisplay();
}
public void digit_4_keyPressed() {
_value = _value * BASE + 4;
_ui.updateDisplay();
}
public void digit_5_keyPressed() {
_value = _value * BASE + 5;
_ui.updateDisplay();
}
public void digit_6_keyPressed() {
_value = _value * BASE + 6;
_ui.updateDisplay();
}
public void digit_7_keyPressed() {
_value = _value * BASE + 7;
_ui.updateDisplay();
}
public void digit_8_keyPressed() {
_value = _value * BASE + 8;
_ui.updateDisplay();
}
public void digit_9_keyPressed() {
_value = _value * BASE + 9;
_ui.updateDisplay();
}
public void clear_keyPressed() {
_value = 0;
_ui.updateDisplay();
}
public int getValue() {
return _value;
}
public void equal_keyPressed() {
_value = _value;
_ui.updateDisplay();
// TODO Define this method
}
public void add_keyPressed() {
_value =
_ui.updateDisplay();
// TODO Define this method
}
}
Now, for example, a basic thing you would do is 1+1. For add_keyPressed, I'm trying to get to 1+1 = 2, instead of 1+1 = 11. So, I"m trying to hold the value input, and add the new value at the same time. This sounds like I'm parameter passing ( I could be wrong ), or modelling, but I'm not quite sure. And I wouldn't know how to do this without Static ( which is an absolute forbidden in my class ), which from what I'm seeing others do, is the standard. Also, within all of this, a method signature -
public int perform(int arg)
Has to be included.
Thanks in advance.
Here is the list of changes
1. Add an enum for operator
2. Add an operator variable to the class
3. Change the constructor to set default value for operator variable
4. Update equals key pressed method
5. Update add key pressed method
public class Calculator {
private static final int BASE = 10;
private int _value;
private int _va;
private CalculatorUI _ui;
private Operator op;
private enum Operator {
ADD, SUB, MUL, DIV, NO_OPERATION
};
public Calculator(CalculatorUI calculatorUI) {
op = Operator.NO_OPERATION;
_ui = calculatorUI;
_value = 0;
}
public void digit_0_keyPressed() {
_value = _value * BASE + 0;
_ui.updateDisplay();
}
public void digit_1_keyPressed() {
_value = _value * BASE + 1;
_ui.updateDisplay();
}
public void digit_2_keyPressed() {
_value = _value * BASE + 2;
_ui.updateDisplay();
}
public void digit_3_keyPressed() {
_value = _value * BASE + 3;
_ui.updateDisplay();
}
public void digit_4_keyPressed() {
_value = _value * BASE + 4;
_ui.updateDisplay();
}
public void digit_5_keyPressed() {
_value = _value * BASE + 5;
_ui.updateDisplay();
}
public void digit_6_keyPressed() {
_value = _value * BASE + 6;
_ui.updateDisplay();
}
public void digit_7_keyPressed() {
_value = _value * BASE + 7;
_ui.updateDisplay();
}
public void digit_8_keyPressed() {
_value = _value * BASE + 8;
_ui.updateDisplay();
}
public void digit_9_keyPressed() {
_value = _value * BASE + 9;
_ui.updateDisplay();
}
public void clear_keyPressed() {
_value = 0;
_ui.updateDisplay();
}
public int getValue() {
return _value;
}
public void equal_keyPressed(String uimessage) {
if (Operator.ADD.equals(op)) {
_value += _va;
} else if (Operator.MUL.equals(op)) {
_value *= _va;
} else if (Operator.DIV.equals(op)) {
_value = _va / _value;
} else if (Operator.SUB.equals(op)) {
_value = _va - _value;
}
_va = 0;
op = Operator.NO_OPERATION;
_ui.updateDisplay();
}
public void add_keyPressed() {
if (!Operator.NO_OPERATION.equals(op)) {
equal_keyPressed();
} else {
_ui.updateDisplay();
}
_va = _value;
_value = 0;
op = Operator.ADD;
}
public void mul_keyPressed() {
if (!Operator.NO_OPERATION.equals(op)) {
equal_keyPressed();
} else {
_ui.updateDisplay();
}
_va = _value;
_value = 0;
op = Operator.MUL;
}
}