diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index eeb5ccc..13239c5 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -28,6 +28,10 @@ public static double multiply(double a, double b) { } public static double divide(double a, double b) { + if (b == 0) { + throw new ArithmeticException("Err"); + } + double quotient = a / b; System.out.println(quotient); return quotient; @@ -40,6 +44,9 @@ public static double square(double a) { } public static double squareRoot(double a) { + if (a < 0) { + throw new ArithmeticException("Err"); + } double result = Math.sqrt(a); System.out.println(result); return result; @@ -58,6 +65,9 @@ public static double invert(double a) { } public static double logarithm(double a) { + if (a <= 0) { + throw new ArithmeticException("Err"); + } double result = Math.log(a); System.out.println(result); return result; @@ -69,7 +79,41 @@ public static double exponent(double a, double b) { return result; } + public static double sine(double a) { + double result = Math.sin(a); + System.out.println(result); + return result; + } + + public static double cosine(double a) { + double result = Math.cos(a); + System.out.println(result); + return result; + } + + public static double tangent(double a) { + double result = Math.tan(a); + System.out.println(result); + return result; + } + public static double inverseSine(double a) { + double result = Math.asin(a); + System.out.println(result); + return result; + } + + public static double inverseCosine(double a) { + double result = Math.acos(a); + System.out.println(result); + return result; + } + + public static double inverseTangent(double a) { + double result = Math.atan(a); + System.out.println(result); + return result; + } public static void print(String output, Object... args) { System.out.printf(output, args); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 77ff5e6..2e4473a 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -40,6 +40,24 @@ public static double calculate(double a, double b, String operator) { case "exp": result = (double) Console.exponent(a, b); break; + case "sin": + result = (double) Console.sine(a); + break; + case "cos": + result = (double) Console.cosine(a); + break; + case "tan": + result = (double) Console.tangent(a); + break; + case "asin": + result = (double) Console.inverseSine(a); + break; + case "acos": + result = (double) Console.inverseCosine(a); + break; + case "atan": + result = (double) Console.inverseTangent(a); + break; default: System.out.println("Invalid operator"); } @@ -50,19 +68,28 @@ public static double calculate(double a, double b, String operator) { public static void main(String[] args) { boolean isRunning = true; double result = 0.0; + double memory = 0.0; + double prevA = 0.0; + double prevB = 0.0; + String prevOperator = ""; - String prompt = "Enter an operator (+, -, *, /, sqrt, sqr, inv, neg, log, exp): "; + String prompt = "Enter an operator (+, -, *, /, sqrt, sqr, inv, neg, log, exp, sin, cos, tan, mr, cv, mc): "; String operatorInput = Console.getStringInput(prompt); - if (operatorInput.equals("sqrt") || operatorInput.equals("sqr") || operatorInput.equals("inv") || operatorInput.equals("neg") || operatorInput.equals("log")) { + if (operatorInput.equals("sqrt") || operatorInput.equals("sqr") || operatorInput.equals("inv") || operatorInput.equals("neg") || operatorInput.equals("log") || operatorInput.equals("sin") || operatorInput.equals("cos") || operatorInput.equals("tan")) { Double numInput = Console.getDoubleInput("Enter a number: "); + prevA = numInput; + prevB = 0.0; + prevOperator = operatorInput; result = calculate(numInput, 0, operatorInput); Console.println("Result: %f", result); } else { - - Double num1Input = Console.getDoubleInput("Enter the first number: "); - Double num2Input = Console.getDoubleInput("Enter the second number: "); - result = calculate(num1Input, num2Input, operatorInput); - Console.println("Result: %f", result); + Double num1Input = Console.getDoubleInput("Enter the first number: "); + Double num2Input = Console.getDoubleInput("Enter the second number: "); + prevA = num1Input; + prevB = num2Input; + prevOperator = operatorInput; + result = calculate(num1Input, num2Input, operatorInput); + Console.println("Result: %f", result); } while (isRunning) { @@ -71,23 +98,42 @@ public static void main(String[] args) { if (again.equalsIgnoreCase("no")) { isRunning = false; } else { - String newOperator = Console.getStringInput("Enter an operator (+, -, *, /, sqrt, sqr, inv, neg, log, exp): "); + String newOperator = Console.getStringInput("Enter an operator (+, -, *, /, sqrt, sqr, inv, neg, log, exp, sin, cos, tan, mr, cv, mc): "); - if (newOperator.equals("sqrt") || newOperator.equals("sqr") || newOperator.equals("inv") || newOperator.equals("neg") || newOperator.equals("log")) { + if (newOperator.equals("mr")) { + result = memory; + Console.println("Memory Recall: %f", result); + } else if (newOperator.equals("cv")) { + Console.println("Current Value: %f", result); + } else if (newOperator.equals("mc")) { + memory = 0.0; + Console.println("Memory cleared."); + } else if (newOperator.equals("redo")) { + Double editNum = Console.getDoubleInput("Enter a new number: "); + memory = result; + result = calculate(prevA, editNum, prevOperator); + Console.println("Result: %f", result); + } + else if (newOperator.equals("sqrt") || newOperator.equals("sqr") || newOperator.equals("inv") || newOperator.equals("neg") || newOperator.equals("log") || newOperator.equals("sin") || newOperator.equals("cos") || newOperator.equals("tan")) { + memory = result; + prevA = result; + prevB = 0.0; + prevOperator = newOperator; result = calculate(result, 0, newOperator); - } else { + Console.println("Result: %f", result); + } + else { Double newNum = Console.getDoubleInput("Enter a number: "); + memory = result; + prevA = result; + prevB = newNum; + prevOperator = newOperator; result = calculate(result, newNum, newOperator); + Console.println("Result: %f", result); } - Console.println("Result: %f", result); } } Console.println("Thank you for using the calculator!"); } } - -// String newOperator = Console.getStringInput("Enter an operator (+, -, *, /): "); -// Double newNum = Console.getDoubleInput("Enter a number: "); -// double newResult = calculate(result, newNum, newOperator); -// result = newResult; \ No newline at end of file