diff --git a/pom.xml b/pom.xml index b92b052..5abfe4b 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.zipcodewilmington @@ -48,6 +48,12 @@ 4.12 test + + + eu.tortitas.utils + lib + 1.2.0 + diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 83f0e97..13239c5 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -5,8 +5,116 @@ /** * Created by leon on 2/9/18. */ + + public class Console { + public static double add(double a, double b) { + double sum = a + b; + System.out.println(sum); + return sum; + } + + public static double subtract(double a, double b) { + double difference = a - b; + System.out.println(difference); + return difference; + } + + public static double multiply(double a, double b) { + double product = a * b; + System.out.println(product); + return product; + } + + 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; + } + + public static double square(double a) { + double result = a * a; + System.out.println(result); + return result; + } + + public static double squareRoot(double a) { + if (a < 0) { + throw new ArithmeticException("Err"); + } + double result = Math.sqrt(a); + System.out.println(result); + return result; + } + + public static double inverse(double a) { + double result = 1 / a; + System.out.println(result); + return result; + } + + public static double invert(double a) { + double result = -a; + System.out.println(result); + return result; + } + + public static double logarithm(double a) { + if (a <= 0) { + throw new ArithmeticException("Err"); + } + double result = Math.log(a); + System.out.println(result); + return result; + } + + public static double exponent(double a, double b) { + double result = Math.pow(a, b); + System.out.println(result); + 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); } @@ -23,10 +131,18 @@ public static String getStringInput(String prompt) { } public static Integer getIntegerInput(String prompt) { - return null; + Scanner scanner = new Scanner(System.in); + println(prompt); + Integer userInput = scanner.nextInt(); + return userInput; } public static Double getDoubleInput(String prompt) { - return null; + Scanner scanner = new Scanner(System.in); + println(prompt); + Double userInput = scanner.nextDouble(); + return userInput; } } + + diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 5f42132..e588081 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -3,15 +3,138 @@ /** * Created by leon on 2/9/18. */ + + public class MainApplication { + + public static double calculate(double a, double b, String operator) { + double result = 0; + switch (operator) { + case "+": + result = Console.add(a, b); + break; + case "-": + result = Console.subtract(a, b); + break; + case "*": + result = Console.multiply(a, b); + break; + case "/": + result = Console.divide(a, b); + break; + case "sqrt": + result = (double) Console.squareRoot(a); + break; + case "sqr": + result = (double) Console.square(a); + break; + case "inv": + result = (double) Console.inverse(a); + break; + case "neg": + result = (double) Console.invert(a); + break; + case "log": + result = (double) Console.logarithm(a); + break; + 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"); + } + return result; + } + + public static void main(String[] args) { - Console.println("Welcome to my calculator!"); - String s = Console.getStringInput("Enter a string"); - Integer i = Console.getIntegerInput("Enter an integer"); - Double d = Console.getDoubleInput("Enter a double."); - - Console.println("The user input %s as a string", s); - Console.println("The user input %s as a integer", i); - Console.println("The user input %s as a d", d); + 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, 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") || 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: "); + prevA = num1Input; + prevB = num2Input; + prevOperator = operatorInput; + result = calculate(num1Input, num2Input, operatorInput); + Console.println("Result: %f", result); + } + + while (isRunning) { + String again = Console.getStringInput("Use result in new equation? (yes/no): "); + + if (again.equalsIgnoreCase("no")) { + isRunning = false; + } else { + String newOperator = Console.getStringInput("Enter an operator (+, -, *, /, sqrt, sqr, inv, neg, log, exp, sin, cos, tan, mr, cv, mc): "); + + 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); + 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("Thank you for using our calculator!"); } } + +// Ready to Send \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java index 94e8d98..850bebf 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java @@ -3,5 +3,49 @@ /** * Created by leon on 2/9/18. */ + +class Prompt { + private String prompt; + private String userInput; + + public Prompt(String prompt, String userInput) { + this.prompt = prompt; + this.userInput = userInput; + } + + public String getPrompt() { + return prompt; + } + + public String getUserInput() { + return userInput; + } +} public class TestMainApplication { + + + public static int add(int a, int b) { + int sum = a + b; + System.out.println(sum); + return sum; + } + + public static int subtract(int a, int b) { + int difference = a - b; + System.out.println(difference); + return difference; + } + + public static int multiply(int a, int b) { + int product = a * b; + System.out.println(product); + return product; + } + + public static int divide(int a, int b) { + int quotient = a / b; + System.out.println(quotient); + return quotient; + } + }