updated code
This commit is contained in:
parent
1037fad955
commit
2bc53c5352
1 changed files with 114 additions and 0 deletions
114
src/xs_ibdpcompsci_javaintro/calculator.java
Normal file
114
src/xs_ibdpcompsci_javaintro/calculator.java
Normal file
|
@ -0,0 +1,114 @@
|
|||
package xs_ibdpcompsci_javaintro;
|
||||
import java.util.*;
|
||||
|
||||
class RPN_Calculator {
|
||||
static void handle_error(int ERROR_TYPE) {
|
||||
String ERROR_MESSAGE = "";
|
||||
|
||||
switch (ERROR_TYPE) {
|
||||
case -1:
|
||||
// Delete the previous line to allow users to edit it.
|
||||
System.out.println("\033[A");
|
||||
break;
|
||||
case -2:
|
||||
ERROR_MESSAGE = "Memory exceeded.";
|
||||
break;
|
||||
case -3:
|
||||
// Division by zero.
|
||||
ERROR_MESSAGE = "Division by zero";
|
||||
break;
|
||||
default:
|
||||
ERROR_MESSAGE = "Error in defining the error.";
|
||||
break;
|
||||
};
|
||||
System.out.println(ERROR_MESSAGE);
|
||||
}
|
||||
|
||||
|
||||
static ArrayList<Object> request_input() {
|
||||
|
||||
// Initialize variables.
|
||||
ArrayList<Object> USER_INPUTS = new ArrayList<Object>();
|
||||
String USER_INPUT_CURRENT = "";
|
||||
Boolean USER_INPUT_MORE = true;
|
||||
int USER_INPUT_LENGTH = 0;
|
||||
|
||||
// Loop for input.
|
||||
do {
|
||||
Scanner input = new Scanner(System.in);
|
||||
|
||||
USER_INPUT_CURRENT = input.nextLine();
|
||||
USER_INPUT_LENGTH = USER_INPUTS.size();
|
||||
|
||||
if (USER_INPUT_CURRENT.matches("-?\\d+(\\.\\d+)?")) {
|
||||
USER_INPUTS.add(Double.parseDouble(USER_INPUT_CURRENT));
|
||||
} else if (USER_INPUTS.size() >= 2) {
|
||||
if (USER_INPUT_CURRENT.matches("[-+\\/*×÷]") && (String.valueOf(USER_INPUTS.get(USER_INPUT_LENGTH-1)).matches("-?\\d+(\\.\\d+)?"))) {
|
||||
System.out.println(USER_INPUTS.get(USER_INPUT_LENGTH-1));
|
||||
USER_INPUTS.add(USER_INPUT_CURRENT);
|
||||
} else if (USER_INPUT_CURRENT.isBlank()) {
|
||||
if (String.valueOf(USER_INPUTS.get(USER_INPUT_LENGTH-1)).isBlank()) {
|
||||
System.exit(0);
|
||||
} else if (String.valueOf(USER_INPUTS.get(USER_INPUT_LENGTH-1)).matches("-?\\d+(\\.\\d+)?")) {
|
||||
handle_error(-1);
|
||||
} else {
|
||||
USER_INPUT_MORE = false;
|
||||
};
|
||||
} else {
|
||||
handle_error(-1);
|
||||
};
|
||||
} else {
|
||||
// The user inputs a wrong code. Let the user edit it.
|
||||
handle_error(-1);
|
||||
};
|
||||
|
||||
} while (USER_INPUT_MORE == true);
|
||||
|
||||
|
||||
return (USER_INPUTS);
|
||||
}
|
||||
|
||||
static double calculate(ArrayList<Object> ENTRIES_LIST) {
|
||||
// Calculate length.
|
||||
int ENTRIES_LIST_LENGTH = ENTRIES_LIST.size();
|
||||
String OPERATION = "";
|
||||
double OPERATION_RESULT = (double) ENTRIES_LIST.get(0);
|
||||
|
||||
if (ENTRIES_LIST_LENGTH > 1) {
|
||||
for (int ENTRY_CURRENT = 0; ENTRY_CURRENT < ENTRIES_LIST_LENGTH; ENTRY_CURRENT++) {
|
||||
if (String.valueOf(ENTRIES_LIST.get(ENTRY_CURRENT)).matches("[-+\\/*×÷]")) {
|
||||
OPERATION = String.valueOf(ENTRIES_LIST.get(ENTRY_CURRENT));
|
||||
|
||||
if (OPERATION == "+") {
|
||||
OPERATION_RESULT += (float) ENTRIES_LIST.get(ENTRY_CURRENT - 1);
|
||||
} else if (OPERATION == "-") {
|
||||
OPERATION_RESULT -= (float) ENTRIES_LIST.get(ENTRY_CURRENT - 1);
|
||||
} else if (OPERATION == "*" || OPERATION == "×") {
|
||||
OPERATION_RESULT *= (float) ENTRIES_LIST.get(ENTRY_CURRENT - 1);
|
||||
} else if (OPERATION == "/" || OPERATION == "÷") {
|
||||
if ((double) ENTRIES_LIST.get(ENTRY_CURRENT - 1) != 0) {
|
||||
OPERATION_RESULT /= (float) ENTRIES_LIST.get(ENTRY_CURRENT - 1);
|
||||
} else {
|
||||
handle_error(-3);
|
||||
break;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
return (OPERATION_RESULT);
|
||||
};
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
// Initialize the input numbers.
|
||||
ArrayList<Object> NUMBERS_INPUT = new ArrayList<Object>();
|
||||
double NUMBER_RESULT;
|
||||
while (true) {
|
||||
NUMBERS_INPUT = request_input();
|
||||
NUMBER_RESULT = calculate(NUMBERS_INPUT);
|
||||
System.out.println(NUMBER_RESULT);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue