From 0fcddf64f26989726d5e29a8d0b56d9794990cf6 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 12:13:29 -0400 Subject: [PATCH 01/68] Scanners set up and perfect example test --- pom.xml | 13 ++++- .../scientificcalculator/Console.java | 4 +- .../scientificcalculator/MainApplication.java | 16 ++++++ .../scientificcalculator/Multiplication.java | 21 ++++++++ .../MultiplicationTest.java | 52 +++++++++++++++++++ 5 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java create mode 100644 src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java diff --git a/pom.xml b/pom.xml index e7cb4f6b..8ef0e24d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,17 @@ com.zipcodewilmington scientific_calculator 1.0-SNAPSHOT - + + + junit + junit + 4.12 + test + + + + 1.8 + 1.8 + \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 83f0e97f..746fe51d 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -23,10 +23,10 @@ public static String getStringInput(String prompt) { } public static Integer getIntegerInput(String prompt) { - return null; + return getDoubleInput(prompt).intValue(); } public static Double getDoubleInput(String prompt) { - return null; + return Double.parseDouble(getStringInput(prompt)); } } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 5f421325..fb38e0b9 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -1,9 +1,25 @@ package com.zipcodewilmington.scientificcalculator; +import java.util.Scanner; + /** * Created by leon on 2/9/18. */ public class MainApplication { + public static void main2(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.println("Hey welcome to the calculator"); + + System.out.println("Enter your name"); + String userName = scanner.nextLine(); + + System.out.println("Enter your age"); + String userAgeAsString = scanner.nextLine(); + Integer userAge = Integer.parseInt(userAgeAsString); + + + + } public static void main(String[] args) { Console.println("Welcome to my calculator!"); String s = Console.getStringInput("Enter a string"); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java new file mode 100644 index 00000000..28859593 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java @@ -0,0 +1,21 @@ +package com.zipcodewilmington.scientificcalculator; + +/** + * Multiplication in our scientific calculator + * @author ronduwell + * Oct 18, 2019 + */ + +public class Multiplication{ + private double x; + private double y; + + public Multiplication(){ + } + + public double multiply(double x, double y){ + return x * y; + } +} + + diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java new file mode 100644 index 00000000..0130ee2e --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java @@ -0,0 +1,52 @@ +package com.zipcodewilmington.scientific_calculator; + +import com.zipcodewilmington.scientificcalculator.Multiplication; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + + +public class MultiplicationTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void multiplyTest() { + // given + Multiplication product = new Multiplication(); + double inputValue1 = 2; + double inputValue2 = 3; + double expected = inputValue1 * inputValue2; + + // when + double actual = product.multiply(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); + } + + + @Test + public void multiplyTest2() { + // given + Multiplication product = new Multiplication(); + double inputValue1 = 7; + double inputValue2 = 3; + double expected = inputValue1 * inputValue2; + + // when + double actual = product.multiply(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); + } + + @Test + public void testMultiply() { + } +} + From 975c7654589f1761d54b14be94de57845de0e357 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 13:59:43 -0400 Subject: [PATCH 02/68] updated test --- .../scientificcalculator/Division.java | 19 +++++++++++++++++++ .../scientificcalculator/MainApplication.java | 6 +++--- .../scientificcalculator/Multiplication.java | 8 ++++---- .../MultiplicationTest.java | 4 ---- 4 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Division.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java new file mode 100644 index 00000000..a593e1cb --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java @@ -0,0 +1,19 @@ +/*ackage com.zipcodewilmington.scientificcalculator; + +public class Division { + private double x; + private double y; + + public Division(){ + } + + public double divide(double x, double y){ + if(y == 0){ + System.out.println("Invalid entry. Cannot divide by 0"); + return null; + } else { + return + } + } +} +*/ \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index fb38e0b9..2928fda1 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -6,7 +6,7 @@ * Created by leon on 2/9/18. */ public class MainApplication { - public static void main2(String[] args) { + public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Hey welcome to the calculator"); @@ -20,7 +20,7 @@ public static void main2(String[] args) { } - public static void main(String[] args) { + public static void main1(String[] args) { Console.println("Welcome to my calculator!"); String s = Console.getStringInput("Enter a string"); Integer i = Console.getIntegerInput("Enter an integer"); @@ -28,6 +28,6 @@ public static void main(String[] args) { 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); + Console.println("The user input %s as a double", d); } } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java index 28859593..5ba1c992 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java @@ -7,14 +7,14 @@ */ public class Multiplication{ - private double x; - private double y; + private double value1; + private double value2; public Multiplication(){ } - public double multiply(double x, double y){ - return x * y; + public Double multiply(double value1, double value2){ + return value1 * value2; } } diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java index 0130ee2e..1b014a94 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java @@ -44,9 +44,5 @@ public void multiplyTest2() { // then assertEquals(expected, actual, .00); } - - @Test - public void testMultiply() { - } } From 83158a00a241256454e3a13acf3d8b59251a5005 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 14:19:42 -0400 Subject: [PATCH 03/68] organized methods --- .../scientificcalculator/Division.java | 16 +++++++--------- .../scientific_calculator/DivisionTest.java | 19 +++++++++++++++++++ .../MultiplicationTest.java | 7 +++---- 3 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java index a593e1cb..93ce785a 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java @@ -1,19 +1,17 @@ -/*ackage com.zipcodewilmington.scientificcalculator; +package com.zipcodewilmington.scientificcalculator; public class Division { - private double x; - private double y; - + private double value1; + private double value2 public Division(){ } - public double divide(double x, double y){ - if(y == 0){ + public Double divide(double value1, double value2){ + if(value2 == 0){ System.out.println("Invalid entry. Cannot divide by 0"); return null; } else { - return + return value1 / value2; } } -} -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java b/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java new file mode 100644 index 00000000..1174927c --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java @@ -0,0 +1,19 @@ +package com.zipcodewilmington.scientific_calculator; + +import com.zipcodewilmington.scientificcalculator.Division; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class DivisionTest { + + + @Before + public void setUp() throws Exception { + } + + @Test + public void divide() { + } +} diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java index 1b014a94..7a9d22ed 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java @@ -3,7 +3,6 @@ import com.zipcodewilmington.scientificcalculator.Multiplication; import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; import static org.junit.Assert.*; @@ -15,12 +14,12 @@ public void setUp() throws Exception { } @Test - public void multiplyTest() { + public void multiplicationTest() { // given Multiplication product = new Multiplication(); double inputValue1 = 2; double inputValue2 = 3; - double expected = inputValue1 * inputValue2; + double expected = inputValue1 / inputValue2; // when double actual = product.multiply(inputValue1,inputValue2); @@ -31,7 +30,7 @@ public void multiplyTest() { @Test - public void multiplyTest2() { + public void divideTest2() { // given Multiplication product = new Multiplication(); double inputValue1 = 7; From 3dc513bb7690c63bb9048004358a1ab77b51e59a Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 14:23:05 -0400 Subject: [PATCH 04/68] Finished Division Test --- .../scientificcalculator/Division.java | 2 +- .../scientific_calculator/DivisionTest.java | 28 ++++++++++++++++++- .../MultiplicationTest.java | 4 +-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java index 93ce785a..52597fbe 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java @@ -2,7 +2,7 @@ public class Division { private double value1; - private double value2 + private double value2; public Division(){ } diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java b/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java index 1174927c..231c669d 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java @@ -14,6 +14,32 @@ public void setUp() throws Exception { } @Test - public void divide() { + public void divideTest1() { + // given + Division product = new Division(); + double inputValue1 = 4; + double inputValue2 = 2; + double expected = inputValue1 / inputValue2; + + // when + double actual = product.divide(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); + } + + @Test + public void divideTest2() { + // given + Division product = new Division(); + double inputValue1 = 15; + double inputValue2 = 5; + double expected = inputValue1 / inputValue2; + + // when + double actual = product.divide(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); } } diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java index 7a9d22ed..896c5f8b 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java @@ -14,7 +14,7 @@ public void setUp() throws Exception { } @Test - public void multiplicationTest() { + public void multiplicationTest1() { // given Multiplication product = new Multiplication(); double inputValue1 = 2; @@ -30,7 +30,7 @@ public void multiplicationTest() { @Test - public void divideTest2() { + public void multiplicationTest2() { // given Multiplication product = new Multiplication(); double inputValue1 = 7; From c1653536d2dd4af60ef8169da3e3aed5f4d3a7ec Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 14:29:29 -0400 Subject: [PATCH 05/68] multiplication test bug fixed --- .../scientific_calculator/MultiplicationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java index 896c5f8b..902e87c7 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java +++ b/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java @@ -19,7 +19,7 @@ public void multiplicationTest1() { Multiplication product = new Multiplication(); double inputValue1 = 2; double inputValue2 = 3; - double expected = inputValue1 / inputValue2; + double expected = inputValue1 * inputValue2; // when double actual = product.multiply(inputValue1,inputValue2); From e4466df4b2a03b1b582661cb73adcbb96519cee3 Mon Sep 17 00:00:00 2001 From: Eddie Morales Date: Sat, 19 Oct 2019 14:45:05 -0400 Subject: [PATCH 06/68] Organized folders --- .../scientificcalculator/Subtraction.java | 15 +++++++++++++++ .../DivisionTest.java | 2 +- .../MultiplicationTest.java | 2 +- .../scientificcalculator/SubtractionTest.java | 17 +++++++++++++++++ .../TestMainApplication.java | 2 +- 5 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java rename src/test/java/com/zipcodewilmington/{scientific_calculator => scientificcalculator}/DivisionTest.java (94%) rename src/test/java/com/zipcodewilmington/{scientific_calculator => scientificcalculator}/MultiplicationTest.java (95%) create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java rename src/test/java/com/zipcodewilmington/{scientific_calculator => scientificcalculator}/TestMainApplication.java (58%) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java new file mode 100644 index 00000000..f65994d6 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java @@ -0,0 +1,15 @@ +package com.zipcodewilmington.scientificcalculator; + + public class Subtraction{ + private double value1; + private double value2; + + public Subtraction(){ + } + + public Double subtract(double value1, double value2){ + return value1 - value2; + } +} + + diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/DivisionTest.java similarity index 94% rename from src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java rename to src/test/java/com/zipcodewilmington/scientificcalculator/DivisionTest.java index 231c669d..8fda24e3 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/DivisionTest.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/DivisionTest.java @@ -1,4 +1,4 @@ -package com.zipcodewilmington.scientific_calculator; +package com.zipcodewilmington.scientificcalculator; import com.zipcodewilmington.scientificcalculator.Division; import org.junit.Before; diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/MultiplicationTest.java similarity index 95% rename from src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java rename to src/test/java/com/zipcodewilmington/scientificcalculator/MultiplicationTest.java index 902e87c7..138edc66 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/MultiplicationTest.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/MultiplicationTest.java @@ -1,4 +1,4 @@ -package com.zipcodewilmington.scientific_calculator; +package com.zipcodewilmington.scientificcalculator; import com.zipcodewilmington.scientificcalculator.Multiplication; import org.junit.Before; diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java new file mode 100644 index 00000000..b59e1d0e --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java @@ -0,0 +1,17 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class SubtractionTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void subtract() { + } +} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientificcalculator/TestMainApplication.java similarity index 58% rename from src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java rename to src/test/java/com/zipcodewilmington/scientificcalculator/TestMainApplication.java index 94e8d987..e8ccb8dd 100644 --- a/src/test/java/com/zipcodewilmington/scientific_calculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/TestMainApplication.java @@ -1,4 +1,4 @@ -package com.zipcodewilmington.scientific_calculator; +package com.zipcodewilmington.scientificcalculator; /** * Created by leon on 2/9/18. From 353b77c90ecd2b694426de71859d4b7b75b633c6 Mon Sep 17 00:00:00 2001 From: Christopher Santana Date: Sat, 19 Oct 2019 15:17:15 -0400 Subject: [PATCH 07/68] Addition and Chris' first upload --- .../scientificcalculator/addition.java | 15 ++++++ .../scientificcalculator/AdditionTest.java | 48 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/addition.java create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/addition.java b/src/main/java/com/zipcodewilmington/scientificcalculator/addition.java new file mode 100644 index 00000000..4b76429a --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/addition.java @@ -0,0 +1,15 @@ +package com.zipcodewilmington.scientificcalculator; + +public class addition{ + private double value1; + private double value2; + + public addition(){ + } + + public double add(double value1 , double value2 ){ + return value1 * value2; + } +} + + diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java new file mode 100644 index 00000000..d1c13119 --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java @@ -0,0 +1,48 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class AdditionTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void additionTest() { + // given + additionTest product = new addition(); + double inputValue1 = 5; + double inputValue2 = 5; + double expected = inputValue1 + inputValue2; + + // when + double actual = product.add(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); + } + + + @Test + public void additionTest2() { + // given + AdditionTest product = new AdditionTest() ; + double inputValue1 = 10; + double inputValue2 = 10; + double expected = inputValue1 * inputValue2; + + // when + double actual = product.add(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); + } + + @Test + public void testAddition() { + } +} \ No newline at end of file From deb2ac5b45e8e4edc2749be1902fb42efa01b69e Mon Sep 17 00:00:00 2001 From: Christopher Santana Date: Sat, 19 Oct 2019 15:34:21 -0400 Subject: [PATCH 08/68] updated addition --- .../scientificcalculator/{addition.java => Addition.java} | 6 +++--- .../scientificcalculator/AdditionTest.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/com/zipcodewilmington/scientificcalculator/{addition.java => Addition.java} (69%) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/addition.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java similarity index 69% rename from src/main/java/com/zipcodewilmington/scientificcalculator/addition.java rename to src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java index 4b76429a..94bb44f3 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/addition.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java @@ -1,14 +1,14 @@ package com.zipcodewilmington.scientificcalculator; -public class addition{ +public class Addition{ private double value1; private double value2; - public addition(){ + public Addition(){ } public double add(double value1 , double value2 ){ - return value1 * value2; + return value1 + value2; } } diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java index d1c13119..59854b73 100644 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java @@ -14,7 +14,7 @@ public void setUp() throws Exception { @Test public void additionTest() { // given - additionTest product = new addition(); + Addition product = new Addition(); double inputValue1 = 5; double inputValue2 = 5; double expected = inputValue1 + inputValue2; @@ -30,10 +30,10 @@ public void additionTest() { @Test public void additionTest2() { // given - AdditionTest product = new AdditionTest() ; + Addition product = new Addition() ; double inputValue1 = 10; double inputValue2 = 10; - double expected = inputValue1 * inputValue2; + double expected = inputValue1 + inputValue2; // when double actual = product.add(inputValue1,inputValue2); From 5c38535434a9e9d634ec9b7d12b3f8c7c1726e52 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 15:43:03 -0400 Subject: [PATCH 09/68] Finished Squared --- .../scientificcalculator/Multiplication.java | 5 -- .../scientificcalculator/Squared.java | 11 +++++ .../scientificcalculator/SquaredTest.java | 47 +++++++++++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/SquaredTest.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java index 5ba1c992..4fe9681f 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java @@ -1,10 +1,5 @@ package com.zipcodewilmington.scientificcalculator; -/** - * Multiplication in our scientific calculator - * @author ronduwell - * Oct 18, 2019 - */ public class Multiplication{ private double value1; diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java new file mode 100644 index 00000000..9c15622a --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java @@ -0,0 +1,11 @@ +package com.zipcodewilmington.scientificcalculator; + +public class Squared{ + double value1; + + public Squared(){ + } + public Double squared(double value1) { + return value1 * value1; + } +} diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/SquaredTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/SquaredTest.java new file mode 100644 index 00000000..aa7e8896 --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/SquaredTest.java @@ -0,0 +1,47 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class SquaredTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void squaredTest1() { + // given + Squared product = new Squared(); + double inputValue1 = 2; + double expected = inputValue1 * inputValue1; + + // when + double actual = product.squared(inputValue1); + + // then + assertEquals(expected, actual, .00); + } + + + @Test + public void multiplicationTest2() { + // given + Squared product = new Squared(); + double inputValue1 = 7; + double expected = inputValue1 * inputValue1; + + // when + double actual = product.squared(inputValue1); + + // then + assertEquals(expected, actual, .00); + } + + @After + public void tearDown() throws Exception { + } +} \ No newline at end of file From aefc722a64076eb8b3ea2dc565f4a50f3d50c720 Mon Sep 17 00:00:00 2001 From: Eddie Morales Date: Sat, 19 Oct 2019 15:57:29 -0400 Subject: [PATCH 10/68] Exponent class added to calculator --- .../scientificcalculator/Exponent.java | 15 +++++++ .../scientificcalculator/ExponentTest.java | 45 +++++++++++++++++++ .../scientificcalculator/SubtractionTest.java | 32 ++++++++++++- 3 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/ExponentTest.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java new file mode 100644 index 00000000..327696ef --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java @@ -0,0 +1,15 @@ +package com.zipcodewilmington.scientificcalculator; + +public class Exponent{ + private double value1; + private double value2; + + public Exponent(){ + } + + public Double exponent(double value1, double value2){ + return Math.pow(value1, value2); + } +} + + diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/ExponentTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/ExponentTest.java new file mode 100644 index 00000000..3b606d54 --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/ExponentTest.java @@ -0,0 +1,45 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class ExponentTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void exponent1() { + + // given + Exponent product = new Exponent(); + double inputValue1 = 2; + double inputValue2 = 3; + double expected = Math.pow(inputValue1, inputValue2); + + // when + double actual = product.exponent(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); + } + + + @Test + public void exponent2() { + // given + Exponent product = new Exponent(); + double inputValue1 = 7; + double inputValue2 = 3; + double expected = Math.pow(inputValue1, inputValue2); + + // when + double actual = product.exponent(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); + } +} diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java index b59e1d0e..f370238b 100644 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java @@ -12,6 +12,34 @@ public void setUp() throws Exception { } @Test - public void subtract() { + public void subtractionTest1() { + // given + Subtraction product = new Subtraction(); + double inputValue1 = 2; + double inputValue2 = 3; + double expected = inputValue1 - inputValue2; + + // when + double actual = product.subtract(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); } -} \ No newline at end of file + + + @Test + public void subtractionTest2() { + // given + Subtraction product = new Subtraction(); + double inputValue1 = 3; + double inputValue2 = 2; + double expected = inputValue1 - inputValue2; + + // when + double actual = product.subtract(inputValue1,inputValue2); + + // then + assertEquals(expected, actual, .00); + } +} + From dc0749f048d93bf9a1acc9f16bbe26e31543e5c0 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 15:58:59 -0400 Subject: [PATCH 11/68] Inverse finished and housecleaned --- .../scientificcalculator/Addition.java | 2 - .../scientificcalculator/Division.java | 2 - .../scientificcalculator/Inverse.java | 17 +++++++ .../scientificcalculator/Multiplication.java | 2 - .../scientificcalculator/Squared.java | 1 - .../scientificcalculator/Subtraction.java | 2 - .../scientificcalculator/InverseTest.java | 46 +++++++++++++++++++ 7 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InverseTest.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java index 94bb44f3..9611f5f6 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java @@ -1,8 +1,6 @@ package com.zipcodewilmington.scientificcalculator; public class Addition{ - private double value1; - private double value2; public Addition(){ } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java index 52597fbe..a49fbc0f 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java @@ -1,8 +1,6 @@ package com.zipcodewilmington.scientificcalculator; public class Division { - private double value1; - private double value2; public Division(){ } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java new file mode 100644 index 00000000..2b873e7c --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java @@ -0,0 +1,17 @@ +package com.zipcodewilmington.scientificcalculator; + +public class Inverse { + private double value1; + + public Inverse(){ + } + + public Double inverse(double value1){ + if(value1 == 0){ + System.out.println("Invalid entry. Cannot have an inverse of 0"); + return null; + } else { + return 1/value1; + } + } +} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java index 4fe9681f..6bb54e74 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java @@ -2,8 +2,6 @@ public class Multiplication{ - private double value1; - private double value2; public Multiplication(){ } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java index 9c15622a..6df6db4b 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java @@ -1,7 +1,6 @@ package com.zipcodewilmington.scientificcalculator; public class Squared{ - double value1; public Squared(){ } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java index f65994d6..153a1664 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java @@ -1,8 +1,6 @@ package com.zipcodewilmington.scientificcalculator; public class Subtraction{ - private double value1; - private double value2; public Subtraction(){ } diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTest.java new file mode 100644 index 00000000..0c07b4d5 --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTest.java @@ -0,0 +1,46 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class InverseTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void inverseTest1() { + // given + Inverse result = new Inverse(); + double inputValue1 = 4; + double expected = 1 / inputValue1; + + // when + double actual = result.inverse(inputValue1); + + // then + assertEquals(expected, actual, .00); + } + + @Test + public void inverseTest2() { + // given + Inverse result = new Inverse(); + double inputValue1 = 15; + double expected = 1 / inputValue1; + + // when + double actual = result.inverse(inputValue1); + + // then + assertEquals(expected, actual, .00); + } + + @After + public void tearDown() throws Exception { + } +} \ No newline at end of file From c0dd73d4debd3784ef7ebbae6a87a52c2a82e13f Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 16:17:43 -0400 Subject: [PATCH 12/68] Finshed the positive to negative --- .../scientificcalculator/Exponent.java | 2 - .../scientificcalculator/Inverse.java | 2 +- .../PositiveToNegative.java | 8 ++++ .../PositiveToNegativeTest.java | 46 +++++++++++++++++++ 4 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/PositiveToNegativeTest.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java index 327696ef..b7e206f3 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java @@ -1,8 +1,6 @@ package com.zipcodewilmington.scientificcalculator; public class Exponent{ - private double value1; - private double value2; public Exponent(){ } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java index 2b873e7c..bda95e0d 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java @@ -8,7 +8,7 @@ public Inverse(){ public Double inverse(double value1){ if(value1 == 0){ - System.out.println("Invalid entry. Cannot have an inverse of 0"); + System.out.println("Invalid entry. Cannot have an inverse of 0."); return null; } else { return 1/value1; diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java b/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java new file mode 100644 index 00000000..7bd208b6 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java @@ -0,0 +1,8 @@ +package com.zipcodewilmington.scientificcalculator; + +public class PositiveToNegative { + + public PositiveToNegative(){ + } + public Double positiveToNegative(double value1) {return value1 * -1}; +} diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/PositiveToNegativeTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/PositiveToNegativeTest.java new file mode 100644 index 00000000..99e2f6aa --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/PositiveToNegativeTest.java @@ -0,0 +1,46 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class PositiveToNegativeTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void multiplicationTest1() { + // given + PositiveToNegative product = new PositiveToNegative(); + double inputValue1 = 2; + double expected = -1 * inputValue1; + + // when + double actual = product.positiveToNegative(inputValue1); + + // then + assertEquals(expected, actual, .00); + } + + @Test + public void multiplicationTest2() { + // given + PositiveToNegative product = new PositiveToNegative(); + double inputValue1 = 17; + double expected = -1 * inputValue1; + + // when + double actual = product.positiveToNegative(inputValue1); + + // then + assertEquals(expected, actual, .00); + } +} \ No newline at end of file From ea97c8369963da61fbd617bff5b51d69a0351426 Mon Sep 17 00:00:00 2001 From: Christopher Santana Date: Sat, 19 Oct 2019 16:27:54 -0400 Subject: [PATCH 13/68] updated sqrt --- .../scientificcalculator/Sqrt.java | 13 ++++++ .../scientificcalculator/SqrtTest.java | 43 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Sqrt.java create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/SqrtTest.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Sqrt.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Sqrt.java new file mode 100644 index 00000000..3627ccd5 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Sqrt.java @@ -0,0 +1,13 @@ +package com.zipcodewilmington.scientificcalculator; + +public class Sqrt{ + private double value1; + + + public Sqrt(){ + } + + public Double sqrt(double value1){ + return Math.sqrt(value1); + } +} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/SqrtTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/SqrtTest.java new file mode 100644 index 00000000..0ddb807f --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/SqrtTest.java @@ -0,0 +1,43 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class SqrtTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void sqrt1() { + + // given + Sqrt product = new Sqrt(); + double inputValue1 = 2; + double expected = Math.sqrt(inputValue1); + + // when + double actual = product.sqrt(inputValue1); + + // then + assertEquals(expected, actual, .00); + } + + + @Test + public void sqrt2() { + // given + Sqrt product = new Sqrt(); + double inputValue1 = 7; + double expected = Math.sqrt(inputValue1); + + // when + double actual = product.sqrt(inputValue1); + + // then + assertEquals(expected, actual, .00); + } +} From 3c0d27cbd552c7f9a1aa5d485934cb9d9b420dc1 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sat, 19 Oct 2019 16:46:29 -0400 Subject: [PATCH 14/68] ; fixed --- .../scientificcalculator/PositiveToNegative.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java b/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java index 7bd208b6..538e2ae7 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java @@ -4,5 +4,5 @@ public class PositiveToNegative { public PositiveToNegative(){ } - public Double positiveToNegative(double value1) {return value1 * -1}; + public Double positiveToNegative(double value1) {return value1 * -1;} } From 654bf29cf05a347612b2dd7bb49ce76fac344b69 Mon Sep 17 00:00:00 2001 From: Eddie Morales Date: Sat, 19 Oct 2019 17:47:43 -0400 Subject: [PATCH 15/68] Added Value and Operator input --- .../scientificcalculator/MainApplication.java | 10 ++++++++++ .../scientificcalculator/PositiveToNegative.java | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 2928fda1..7be957a2 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -16,6 +16,16 @@ public static void main(String[] args) { System.out.println("Enter your age"); String userAgeAsString = scanner.nextLine(); Integer userAge = Integer.parseInt(userAgeAsString); + + System.out.println("Enter your value"); + String userValueAsString = scanner.nextLine(); + Integer userValue = Integer.parseInt(userValueAsString); + + System.out.println("Choose your Operator"); + String userOperatorAsString = scanner.nextLine(); + Integer userOperator = Integer.parseInt(userOperatorAsString); + + diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java b/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java index 7bd208b6..1771d9ae 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/PositiveToNegative.java @@ -4,5 +4,9 @@ public class PositiveToNegative { public PositiveToNegative(){ } - public Double positiveToNegative(double value1) {return value1 * -1}; + public Double positiveToNegative(double value1) { + + return value1 * -1; + + } } From ce2a5dcf7eb91ce426887439df8aca59017e87f9 Mon Sep 17 00:00:00 2001 From: Christopher Santana Date: Sat, 19 Oct 2019 17:55:50 -0400 Subject: [PATCH 16/68] updated pull --- src/main/java/com/.idea/misc.xml | 6 + src/main/java/com/.idea/modules.xml | 8 ++ src/main/java/com/.idea/vcs.xml | 6 + src/main/java/com/.idea/workspace.xml | 117 ++++++++++++++++++ .../scientificcalculator/MainApplication.java | 1 + .../PositiveToNegative.java | 11 +- 6 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/.idea/misc.xml create mode 100644 src/main/java/com/.idea/modules.xml create mode 100644 src/main/java/com/.idea/vcs.xml create mode 100644 src/main/java/com/.idea/workspace.xml diff --git a/src/main/java/com/.idea/misc.xml b/src/main/java/com/.idea/misc.xml new file mode 100644 index 00000000..28a804d8 --- /dev/null +++ b/src/main/java/com/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/.idea/modules.xml b/src/main/java/com/.idea/modules.xml new file mode 100644 index 00000000..a8b7e67f --- /dev/null +++ b/src/main/java/com/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/.idea/vcs.xml b/src/main/java/com/.idea/vcs.xml new file mode 100644 index 00000000..4fce1d86 --- /dev/null +++ b/src/main/java/com/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/.idea/workspace.xml b/src/main/java/com/.idea/workspace.xml new file mode 100644 index 00000000..126e7e0e --- /dev/null +++ b/src/main/java/com/.idea/workspace.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1571592950549 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/misc.xml b/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/misc.xml new file mode 100644 index 00000000..28a804d8 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/modules.xml b/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/modules.xml new file mode 100644 index 00000000..22b6e7de --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/vcs.xml b/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/vcs.xml new file mode 100644 index 00000000..821e530d --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/workspace.xml b/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/workspace.xml new file mode 100644 index 00000000..4ef2c7bc --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/.idea/workspace.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - 1571592884150 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 1caab5f5..6c8c8001 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -7,6 +7,7 @@ public class Calculator { Scanner scanner = new Scanner(System.in); + InputChecker inputCheck = new InputChecker(); //create an array that includes all of the available operators String[] operators = {"add", "subtract", "multiply", "divide", "exponent", "square", "square root", "factorial", "inverse", "invert", "sin", "cos,", "tan", "inverse sin", "inverse cos", @@ -67,16 +68,28 @@ public void runCalculator() { } //ask the user for a value - System.out.println("Enter your value"); - String userValueAsString = scanner.nextLine(); - Double userValue1 = Double.parseDouble(userValueAsString); - + System.out.println("Enter your value"); + String userValueAsString = scanner.nextLine(); + boolean correctInput = false; + //run a while loop that checks if a proper number was entered + while(!correctInput) { + correctInput = inputCheck.isNumeric(userValueAsString); + System.out.println("Enter your value"); + userValueAsString = scanner.nextLine(); + } + Double userValue1 = Double.parseDouble(userValueAsString); if (need2ValuesList.contains(userOperator)) { //ask for a second value System.out.println("Enter your second value"); String userValue2AsString = scanner.nextLine(); - ; + correctInput = false; + //run a while loop that checks if a proper number was entered + while(!correctInput) { + correctInput = inputCheck.isNumeric(userValueAsString); + System.out.println("Enter your value"); + userValueAsString = scanner.nextLine(); + } Double userValue2 = Double.parseDouble(userValue2AsString); //run the need2value operators INSIDE the if statement diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java new file mode 100644 index 00000000..b1f77b8d --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java @@ -0,0 +1,17 @@ +package com.zipcodewilmington.scientificcalculator; + +public class InputChecker { + + public InputChecker(){ + } + + public static boolean isNumeric(String str) { + try { + Double.parseDouble(str); + return true; + } catch(NumberFormatException e){ + System.out.println("ERROR: Enter a valid number."); + return false; + } + } +} From d42349859d22e187574a61882664e5c37aeade0a Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 17:05:18 -0400 Subject: [PATCH 47/68] fixed the loop... again --- .../scientificcalculator/Calculator.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 6c8c8001..b315f477 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -73,9 +73,11 @@ public void runCalculator() { boolean correctInput = false; //run a while loop that checks if a proper number was entered while(!correctInput) { - correctInput = inputCheck.isNumeric(userValueAsString); - System.out.println("Enter your value"); - userValueAsString = scanner.nextLine(); + correctInput = inputCheck.isNumeric(userValueAsString); + if(correctInput) break; + System.out.println("Enter your value"); + userValueAsString = scanner.nextLine(); + } Double userValue1 = Double.parseDouble(userValueAsString); @@ -87,7 +89,8 @@ public void runCalculator() { //run a while loop that checks if a proper number was entered while(!correctInput) { correctInput = inputCheck.isNumeric(userValueAsString); - System.out.println("Enter your value"); + if(correctInput) break; + System.out.println("Enter your second value"); userValueAsString = scanner.nextLine(); } Double userValue2 = Double.parseDouble(userValue2AsString); From ec11e20f70bd0b89e90c4d54fd1b3fe379d2a2cb Mon Sep 17 00:00:00 2001 From: Eddie Morales Date: Sun, 20 Oct 2019 17:06:04 -0400 Subject: [PATCH 48/68] DegreesToRadians --- .../scientificcalculator/DegreesToRadians.java | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java b/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java new file mode 100644 index 00000000..a1c54c26 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java @@ -0,0 +1,2 @@ +public class DegreesToRadians { +} From d3fcd51ecd3c09acf8a4ca6c1b3bd4450a4b2c74 Mon Sep 17 00:00:00 2001 From: Eddie Morales Date: Sun, 20 Oct 2019 17:07:13 -0400 Subject: [PATCH 49/68] DegreesToRadians --- .../scientificcalculator/Calculator.java | 13 ++++++---- .../DegreesToRadians.java | 26 ++++++++++++++++++- .../scientificcalculator/MainApplication.java | 10 ++++--- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index b8d94f73..63869f25 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -3,7 +3,6 @@ import java.util.Arrays; import java.util.List; import java.util.Scanner; -import java.util.SortedMap; public class Calculator { Scanner scanner = new Scanner(System.in); @@ -20,7 +19,6 @@ public class Calculator { public Calculator() { } - public void runCalculator() { boolean returnToMainMenu = true; while (returnToMainMenu) { @@ -62,6 +60,9 @@ public void runCalculator() { System.out.println("Choose your Operator\nType \"cmd\" for commands."); userOperator = scanner.nextLine(); } + if(userOperator.equals("return")){ + break; + } //ask the user for a value System.out.println("Enter your value"); @@ -108,9 +109,7 @@ public void runCalculator() { } } else if (!need2ValuesList.contains(userOperator)) { switch (userOperator) { - case "return": - returnToMainMenu = false; - break; + case "square": Squared squared = new Squared(); Double powerOf = squared.squared(userValue1); @@ -185,6 +184,10 @@ public void runCalculator() { Double inverseNatLog = inverseNaturalLogarithm.inverseNaturalLogarithm(userValue1); System.out.println("(e^" + userValue1 + " = " + inverseNatLog); break; + + case "return": + runCalculator(); + break; /*case "natural log": NaturalLogarithm naturalLogarithm = new NaturalLogarithm(); Double naturalLog = naturalLogarithm.naturalLogarithm(userValue1); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java b/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java index a1c54c26..c0ae089f 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java @@ -1,2 +1,26 @@ +package com.zipcodewilmington.scientificcalculator; +import java.util.Scanner; + public class DegreesToRadians { -} + Scanner scanner = new Scanner(System.in); + String[] degreesRadians = {"radians", "degrees"}; + + public String degreesToRadians() { + boolean D2R = true; + String degreesRadians = ""; + while (D2R) { + System.out.println("Pick between degrees or radians"); + String userOperator = scanner.nextLine(); + if (userOperator.equals("degrees")) { + degreesRadians = "degrees"; + D2R = false; + } else if (userOperator.equals("radians")) { + degreesRadians = "radians"; + D2R = false; + } else { + System.out.println("ERROR: Please enter \"degrees\" or \"radians\"."); + } + } + return degreesRadians; + } +} \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 12cb1dce..096d5a53 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -1,9 +1,8 @@ package com.zipcodewilmington.scientificcalculator; -import java.util.Scanner; import java.util.Arrays; import java.util.List; -import java.lang.Math; +import java.util.Scanner; /** * Created by leon on 2/9/18. @@ -14,7 +13,7 @@ public class MainApplication { public static void main(String[] args) { boolean turnOn = true; //make a list of basic commands for calulator - String[] basicCommands = {"run calculator", "clear display", "print current number", "switch trig units", + String[] basicCommands = {"run calculator", "clear display", "degrees or radians", "switch trig units", "switch display mode", "erase memory", "turn off"}; //turn that array into a string List basicCommandsList = Arrays.asList(basicCommands); @@ -31,6 +30,7 @@ public static void main(String[] args) { while (!basicCommandsList.contains(userCommand)) { if (userCommand.equals("cmd")) { System.out.println("*\"run calculator\" - Run the Calculator*"); + System.out.println("*\"degrees or radians\" - Switch between trig numerics"); System.out.println("*\"turn off\" - Turn Off the Calculator*"); System.out.println("*Other list of commands UPCOMING!*\n"); } else if (basicCommandsList.contains(userCommand)) { @@ -47,6 +47,10 @@ public static void main(String[] args) { Calculator calculator = new Calculator(); calculator.runCalculator(); break; + case "degrees or radians": + DegreesToRadians degreesRadians = new DegreesToRadians(); + degreesRadians.degreesToRadians(); + break; case "turn off": turnOn = false; break; From cebe417916351d120b0e2081dcedd653d7a963a8 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 17:12:18 -0400 Subject: [PATCH 50/68] pulling --- .../scientificcalculator/MainApplication.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index c0d285ad..1b03fcdf 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -14,8 +14,7 @@ public class MainApplication { public static void main(String[] args) { boolean turnOn = true; //make a list of basic commands for calulator - String[] basicCommands = {"run calculator", "clear display", "print current number", "switch trig units", - "switch display mode", "erase memory", "turn off"}; + String[] basicCommands = {"run calculator", "turn off"}; //turn that array into a string List basicCommandsList = Arrays.asList(basicCommands); //call the scanner From d553f7bb94958fb87a47c4cb04de2d260b710573 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 18:12:21 -0400 Subject: [PATCH 51/68] converted selection to numbers --- .../scientificcalculator/Calculator.java | 91 +++++++++---------- .../DegreesToRadians.java | 30 +++--- .../scientificcalculator/MainApplication.java | 15 ++- 3 files changed, 68 insertions(+), 68 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 0d858ceb..5052f7de 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -8,13 +8,13 @@ public class Calculator { Scanner scanner = new Scanner(System.in); InputChecker inputCheck = new InputChecker(); //create an array that includes all of the available operators - String[] operators = {"add", "subtract", "multiply", "divide", "exponent", "square", "square root", "factorial", - "inverse", "invert", "sin", "cos,", "tan", "inverse sin", "inverse cos", - "inverse tan", "log", "inverse log", "natural log", "inverse natural log", "return"}; + String[] operators = {"1", "2", "3", "4", "5", "6", "7", "8", "9", + "10", "11", "12", "13,", "14", "15", "16", + "17", "18", "19", "20", "return"}; //turn that array into a string List operatorsList = Arrays.asList(operators); //create an array of each operation that requires two values - String[] need2Values = {"add", "subtract", "multiply", "divide", "exponent"}; + String[] need2Values = {"1", "2", "3", "4", "5"}; //turn that array into a string List need2ValuesList = Arrays.asList(need2Values); @@ -29,28 +29,28 @@ public void runCalculator() { while (!operatorsList.contains(userOperator)) { //provide a list of commands if (userOperator.equals("cmd")) { - System.out.println("*\"add\" - + - Addition*"); - System.out.println("*\"subtract\" - - - Subtraction*"); - System.out.println("*\"multiply\" - * - Multiplication*"); - System.out.println("*\"divide\" - / - Division*"); - System.out.println("*\"exponent\" - x^y - Exponential*"); - System.out.println("*\"square\" - x^2 - Squared*"); - System.out.println("*\"square root\" - √ -Square Root*"); - System.out.println("*\"factorial\" - !x - Factorial*"); - System.out.println("*\"inverse\" - 1/x - Inverse*"); - System.out.println("*\"invert\" - +- - Invert*"); - System.out.println("*\"sin\" - sin(x) - Sine*"); - System.out.println("*\"cos\" - cos(x) - Cosine*"); - System.out.println("*\"tan\" - tan(x) - Tangent*"); - System.out.println("*\"inverse sin\" - sin(x)^-1 - Inverse Sine*"); - System.out.println("*\"inverse cos\" - cos(x)^-1 - Inverse Cosine*"); - System.out.println("*\"inverse tan\" - tan(x)^-1 - Inverse Tangent*"); - System.out.println("*\"log\" - log(x) - Logarithm*"); - System.out.println("*\"inverse log\" - 10^x - Inverse Logarithm*"); - System.out.println("*\"natural log\" - ln(x) - Natural Logarithm*"); - System.out.println("*\"inverse natural log\" - e^x - Inverse Natural Logarithm*"); + System.out.println("\"1\" - + - Addition"); + System.out.println("\"2\" - - - Subtraction"); + System.out.println("\"3\" - * - Multiplication"); + System.out.println("\"4\" - / - Division"); + System.out.println("\"5\" - x^y - Exponential"); + System.out.println("\"6\" - x^2 - Squared"); + System.out.println("\"7\" - √ -Square Root"); + System.out.println("\"8\" - !x - Factorial"); + System.out.println("\"9\" - 1/x - Inverse"); + System.out.println("\"10\" - +- - Invert"); + System.out.println("\"11\" - sin(x) - Sine"); + System.out.println("\"12\" - cos(x) - Cosine"); + System.out.println("\"13\" - tan(x) - Tangent"); + System.out.println("\"14\" - sin(x)^-1 - Inverse Sine"); + System.out.println("\"15\" - cos(x)^-1 - Inverse Cosine"); + System.out.println("\"16\" - tan(x)^-1 - Inverse Tangent"); + System.out.println("\"17\" - log(x) - Logarithm"); + System.out.println("\"18\" - 10^x - Inverse Logarithm"); + System.out.println("\"19\" - ln(x) - Natural Logarithm"); + System.out.println("\"20\" - e^x - Inverse Natural Logarithm"); //give an option to exit the calculator and go back to the main menu - System.out.println("*\"return\" - e^x - Return to Main Menu*"); + System.out.println("****\"return\" - Return to Main Menu"); //check if operator is correct, and break the loop } else if (operatorsList.contains(userOperator)) { break; @@ -66,9 +66,6 @@ public void runCalculator() { break; } - if(userOperator.equals("return")){ - break; - } //ask the user for a value System.out.println("Enter your value"); @@ -100,29 +97,29 @@ public void runCalculator() { //run the need2value operators INSIDE the if statement switch (userOperator) { - case "add": + case "1": Addition add = new Addition(); Double sum = add.add(userValue1, userValue2); System.out.println(userValue1 + " + " + userValue2 + " = " + sum); break; - case "subtract": + case "2": Subtraction subtract = new Subtraction(); Double difference = subtract.subtract(userValue1, userValue2); System.out.println(userValue1 + " - " + userValue2 + " = " + difference); break; - case "multiply": + case "3": Multiplication multiply = new Multiplication(); Double product = multiply.multiply(userValue1, userValue2); System.out.println(userValue1 + " * " + userValue2 + " = " + product); break; - case "divide": + case "4": Division divide = new Division(); Double quotient = divide.divide(userValue1, userValue2); if (quotient != null) { System.out.println(userValue1 + " / " + userValue2 + " = " + quotient); } break; - case "exponent": + case "5": Exponent exponent = new Exponent(); Double powerOf = exponent.exponent(userValue1, userValue2); System.out.println(userValue1 + " ^ " + userValue2 + " = " + powerOf); @@ -130,39 +127,39 @@ public void runCalculator() { } } else if (!need2ValuesList.contains(userOperator)) { switch (userOperator) { - case "square": + case "6": Squared squared = new Squared(); Double powerOf = squared.squared(userValue1); System.out.println(userValue1 + " ^2 = " + powerOf); break; - case "square root": + case "7": Sqrt sqrt = new Sqrt(); Double squareRoot = sqrt.sqrt(userValue1); if (squareRoot != null) System.out.println("√" + userValue1); break; - case "factorial": + case "8": Factorial factorial = new Factorial(); Double facto = factorial.factorial(userValue1); System.out.println("!" + userValue1 + " = " + facto); break; - case "inverse": + case "9": Inverse inverse = new Inverse(); Double inversed = inverse.inverse(userValue1); if (inverse != null) System.out.println("1/" + userValue1 + " = " + inversed); break; - case "invert": + case "10": Invert invert = new Invert(); Double inverted = invert.invert(userValue1); System.out.println(userValue1 + " inverted = " + inverted); break; - case "sin": + case "11": Sine sine = new Sine(); Double sin = sine.sine(userValue1); System.out.println("sin(" + userValue1 + ") = " + sin); break; - case "cos": + case "12": Cosine cosine = new Cosine(); Double cos = cosine.cosine(userValue1); System.out.println("cos(" + userValue1 + ") = " + cos); @@ -172,40 +169,40 @@ public void runCalculator() { Double tan = tangent.tangent(userValue1); System.out.println("tan(" + userValue1 + ") = " + tan); break; - case "inverse sin": + case "13": InverseSine inverseSine = new InverseSine(); Double inverseSin = inverseSine.inverseSine(userValue1); System.out.println("sin(" + userValue1 + ")^-1 = " + inverseSin); break; - case "inverse cos": + case "14": InverseCosine inverseCosine = new InverseCosine(); Double inverseCos = inverseCosine.inverseCosine(userValue1); System.out.println("cos(" + userValue1 + ")^-1 = " + inverseCos); break; - case "inverse tan": + case "15": InverseTangent inverseTangent = new InverseTangent(); Double inverseTan = inverseTangent.inverseTangent(userValue1); System.out.println("tan(" + userValue1 + ")^-1 = " + inverseTan); break; - case "log": + case "16": Logarithm logarithm = new Logarithm(); Double log = logarithm.logarithm(userValue1); if (log != null) System.out.println("Log(" + userValue1 + ") = " + log); break; - case "inverse log": + case "17": InverseLogarithm inverseLogarithm = new InverseLogarithm(); Double inverseLog = inverseLogarithm.inverseLogarithm(userValue1); if (inverseLog != null) System.out.println("10^" + userValue1 + " = " + inverseLog); break; - case "natural log": + case "18": NaturalLogarithm naturalLogarithm = new NaturalLogarithm(); Double naturalLog = naturalLogarithm.naturalLogarithm(userValue1); if(naturalLog != null) System.out.println("ln(" + userValue1 + ") = " + naturalLog); break; - case "inverse natural log": + case "19": InverseNaturalLogarithm inverseNaturalLogarithm = new InverseNaturalLogarithm(); Double inverseNatLog = inverseNaturalLogarithm.inverseNaturalLogarithm(userValue1); System.out.println("(e^" + userValue1 + " = " + inverseNatLog); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java b/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java index c0ae089f..b6ab6b02 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java @@ -3,24 +3,28 @@ public class DegreesToRadians { Scanner scanner = new Scanner(System.in); - String[] degreesRadians = {"radians", "degrees"}; + String degreesRadians; public String degreesToRadians() { boolean D2R = true; - String degreesRadians = ""; + while (D2R) { - System.out.println("Pick between degrees or radians"); - String userOperator = scanner.nextLine(); - if (userOperator.equals("degrees")) { - degreesRadians = "degrees"; - D2R = false; - } else if (userOperator.equals("radians")) { - degreesRadians = "radians"; - D2R = false; - } else { - System.out.println("ERROR: Please enter \"degrees\" or \"radians\"."); + String userOperator = ""; + while(!userOperator.equals("degrees") || !userOperator.equals("radians")){ + System.out.println("Pick between degrees or radians"); + userOperator = scanner.nextLine(); + switch (userOperator){ + case "degrees": + degreesRadians = "degrees"; + break; + case "radians": + degreesRadians = "radians"; + break; + default: + System.out.println("ERROR: Please enter \"degrees\" or \"radians\"."); + } + }if(userOperator.equals("degrees") || userOperator.equals("radians")) break; } - } return degreesRadians; } } \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index fe70b950..cfe909cc 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -14,7 +14,7 @@ public static void main(String[] args) { boolean turnOn = true; //make a list of basic commands for calulator - String[] basicCommands = {"run calculator", "turn off"}; + String[] basicCommands = {"1", "2", "3"}; //turn that array into a string List basicCommandsList = Arrays.asList(basicCommands); @@ -31,10 +31,9 @@ public static void main(String[] args) { while (!basicCommandsList.contains(userCommand)) { if (userCommand.equals("cmd")) { - System.out.println("*\"run calculator\" - Run the Calculator*"); - System.out.println("*\"degrees or radians\" - Switch between trig numerics"); - System.out.println("*\"turn off\" - Turn Off the Calculator*"); - System.out.println("*Other list of commands UPCOMING!*\n"); + System.out.println("\"1\" - Run the Calculator"); + System.out.println("\"2\" - Switch between trig numerics"); + System.out.println("\"3\" - Turn Off the Calculator"); } else if (basicCommandsList.contains(userCommand)) { break; } else { @@ -45,15 +44,15 @@ public static void main(String[] args) { } switch (userCommand) { - case "run calculator": + case "1": Calculator calculator = new Calculator(); calculator.runCalculator(); break; - case "degrees or radians": + case "2": DegreesToRadians degreesRadians = new DegreesToRadians(); degreesRadians.degreesToRadians(); break; - case "turn off": + case "3": turnOn = false; break; } From 5bdf493868b97a37afcaeb6dd702df249791a236 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 18:17:04 -0400 Subject: [PATCH 52/68] fixed typos --- .../zipcodewilmington/scientificcalculator/Calculator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 5052f7de..c2082157 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -136,7 +136,7 @@ public void runCalculator() { Sqrt sqrt = new Sqrt(); Double squareRoot = sqrt.sqrt(userValue1); if (squareRoot != null) - System.out.println("√" + userValue1); + System.out.println("√" + userValue1 + " = " + squareRoot); break; case "8": Factorial factorial = new Factorial(); @@ -205,7 +205,7 @@ public void runCalculator() { case "19": InverseNaturalLogarithm inverseNaturalLogarithm = new InverseNaturalLogarithm(); Double inverseNatLog = inverseNaturalLogarithm.inverseNaturalLogarithm(userValue1); - System.out.println("(e^" + userValue1 + " = " + inverseNatLog); + System.out.println("e^" + userValue1 + " = " + inverseNatLog); break; } } From a332c67c30299a48279838e9d6e743234d67bb84 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 18:22:22 -0400 Subject: [PATCH 53/68] fixed inverse --- .../com/zipcodewilmington/scientificcalculator/Calculator.java | 2 +- .../com/zipcodewilmington/scientificcalculator/Inverse.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index c2082157..ec112c7d 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -146,7 +146,7 @@ public void runCalculator() { case "9": Inverse inverse = new Inverse(); Double inversed = inverse.inverse(userValue1); - if (inverse != null) + if (inversed != null) System.out.println("1/" + userValue1 + " = " + inversed); break; case "10": diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java index 163a4f76..d5cdc868 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java @@ -1,7 +1,6 @@ package com.zipcodewilmington.scientificcalculator; public class Inverse { - private double value1; public Inverse(){ } From 700dbc7ef0ac6625a0bf630cd6c240a53ded61f3 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 18:26:10 -0400 Subject: [PATCH 54/68] general housekeeping --- .../scientificcalculator/Calculator.java | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index ec112c7d..419491af 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -4,25 +4,23 @@ import java.util.List; import java.util.Scanner; -public class Calculator { - Scanner scanner = new Scanner(System.in); - InputChecker inputCheck = new InputChecker(); +class Calculator { + private Scanner scanner = new Scanner(System.in); //create an array that includes all of the available operators - String[] operators = {"1", "2", "3", "4", "5", "6", "7", "8", "9", + private String[] operators = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13,", "14", "15", "16", "17", "18", "19", "20", "return"}; //turn that array into a string - List operatorsList = Arrays.asList(operators); + private List operatorsList = Arrays.asList(operators); //create an array of each operation that requires two values - String[] need2Values = {"1", "2", "3", "4", "5"}; + private String[] need2Values = {"1", "2", "3", "4", "5"}; //turn that array into a string - List need2ValuesList = Arrays.asList(need2Values); + private List need2ValuesList = Arrays.asList(need2Values); - public Calculator() { + Calculator() { } - public void runCalculator() { - boolean returnToMainMenu = true; - while (returnToMainMenu) { + void runCalculator() { + while (true) { System.out.println("Choose your Operator\nType \"cmd\" for commands."); String userOperator = scanner.nextLine(); //ask the user for a operator @@ -70,36 +68,35 @@ public void runCalculator() { //ask the user for a value System.out.println("Enter your value"); String userValueAsString = scanner.nextLine(); - boolean correctInput = false; + boolean correctInput; //run a while loop that checks if a proper number was entered - while(!correctInput) { - correctInput = inputCheck.isNumeric(userValueAsString); + while(true) { + correctInput = InputChecker.isNumeric(userValueAsString); if(correctInput) break; System.out.println("Enter your value"); userValueAsString = scanner.nextLine(); } - Double userValue1 = Double.parseDouble(userValueAsString); + double userValue1 = Double.parseDouble(userValueAsString); if (need2ValuesList.contains(userOperator)) { //ask for a second value System.out.println("Enter your second value"); String userValue2AsString = scanner.nextLine(); - correctInput = false; //run a while loop that checks if a proper number was entered - while(!correctInput) { - correctInput = inputCheck.isNumeric(userValueAsString); + while(true) { + correctInput = InputChecker.isNumeric(userValueAsString); if(correctInput) break; System.out.println("Enter your second value"); userValueAsString = scanner.nextLine(); } - Double userValue2 = Double.parseDouble(userValue2AsString); + double userValue2 = Double.parseDouble(userValue2AsString); //run the need2value operators INSIDE the if statement switch (userOperator) { case "1": Addition add = new Addition(); - Double sum = add.add(userValue1, userValue2); + double sum = add.add(userValue1, userValue2); System.out.println(userValue1 + " + " + userValue2 + " = " + sum); break; case "2": From a88ee465ff43352d4a5cbab163e85ce6c9947691 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 21:25:33 -0400 Subject: [PATCH 55/68] final draft? --- .../scientificcalculator/Calculator.java | 87 +++++++++---------- .../scientificcalculator/Console.java | 3 + .../DegreesToRadians.java | 30 ------- .../scientificcalculator/MainApplication.java | 21 ++--- 4 files changed, 53 insertions(+), 88 deletions(-) delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 419491af..aa585748 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -16,9 +16,8 @@ class Calculator { private String[] need2Values = {"1", "2", "3", "4", "5"}; //turn that array into a string private List need2ValuesList = Arrays.asList(need2Values); + private Integer pageNumber = 1; - Calculator() { - } void runCalculator() { while (true) { System.out.println("Choose your Operator\nType \"cmd\" for commands."); @@ -59,25 +58,24 @@ void runCalculator() { System.out.println("Choose your Operator\nType \"cmd\" for commands."); userOperator = scanner.nextLine(); } - - if(userOperator.equals("return")){ - break; - } + if(userOperator.equals("return")){ + break; + } //ask the user for a value + System.out.println("Enter your value"); + String userValueAsString = scanner.nextLine(); + boolean correctInput; + //run a while loop that checks if a proper number was entered + while (true) { + correctInput = InputChecker.isNumeric(userValueAsString); + if (correctInput) break; System.out.println("Enter your value"); - String userValueAsString = scanner.nextLine(); - boolean correctInput; - //run a while loop that checks if a proper number was entered - while(true) { - correctInput = InputChecker.isNumeric(userValueAsString); - if(correctInput) break; - System.out.println("Enter your value"); - userValueAsString = scanner.nextLine(); + userValueAsString = scanner.nextLine(); - } - double userValue1 = Double.parseDouble(userValueAsString); + } + double userValue1 = Double.parseDouble(userValueAsString); if (need2ValuesList.contains(userOperator)) { //ask for a second value @@ -97,29 +95,29 @@ void runCalculator() { case "1": Addition add = new Addition(); double sum = add.add(userValue1, userValue2); - System.out.println(userValue1 + " + " + userValue2 + " = " + sum); + System.out.println(userValue1 + " + " + userValue2 + " = " + sum + "\n"); break; case "2": Subtraction subtract = new Subtraction(); Double difference = subtract.subtract(userValue1, userValue2); - System.out.println(userValue1 + " - " + userValue2 + " = " + difference); + System.out.println(userValue1 + " - " + userValue2 + " = " + difference + "\n"); break; case "3": Multiplication multiply = new Multiplication(); Double product = multiply.multiply(userValue1, userValue2); - System.out.println(userValue1 + " * " + userValue2 + " = " + product); + System.out.println(userValue1 + " * " + userValue2 + " = " + product + "\n"); break; case "4": Division divide = new Division(); Double quotient = divide.divide(userValue1, userValue2); if (quotient != null) { - System.out.println(userValue1 + " / " + userValue2 + " = " + quotient); + System.out.println(userValue1 + " / " + userValue2 + " = " + quotient + "\n"); } break; case "5": Exponent exponent = new Exponent(); Double powerOf = exponent.exponent(userValue1, userValue2); - System.out.println(userValue1 + " ^ " + userValue2 + " = " + powerOf); + System.out.println(userValue1 + " ^ " + userValue2 + " = " + powerOf + "\n"); break; } } else if (!need2ValuesList.contains(userOperator)) { @@ -127,83 +125,84 @@ void runCalculator() { case "6": Squared squared = new Squared(); Double powerOf = squared.squared(userValue1); - System.out.println(userValue1 + " ^2 = " + powerOf); + System.out.println(userValue1 + " ^2 = " + powerOf + "\n"); break; case "7": Sqrt sqrt = new Sqrt(); Double squareRoot = sqrt.sqrt(userValue1); if (squareRoot != null) - System.out.println("√" + userValue1 + " = " + squareRoot); + System.out.println("√" + userValue1 + " = " + squareRoot + "\n"); break; case "8": Factorial factorial = new Factorial(); Double facto = factorial.factorial(userValue1); - System.out.println("!" + userValue1 + " = " + facto); + System.out.println("!" + userValue1 + " = " + facto + "\n"); break; case "9": Inverse inverse = new Inverse(); Double inversed = inverse.inverse(userValue1); if (inversed != null) - System.out.println("1/" + userValue1 + " = " + inversed); + System.out.println("1/" + userValue1 + " = " + inversed + "\n"); break; case "10": Invert invert = new Invert(); Double inverted = invert.invert(userValue1); - System.out.println(userValue1 + " inverted = " + inverted); + System.out.println(userValue1 + " inverted = " + inverted + "\n"); break; case "11": Sine sine = new Sine(); Double sin = sine.sine(userValue1); - System.out.println("sin(" + userValue1 + ") = " + sin); + System.out.println("sin(" + userValue1 + ") = " + sin + "\n"); break; case "12": Cosine cosine = new Cosine(); Double cos = cosine.cosine(userValue1); - System.out.println("cos(" + userValue1 + ") = " + cos); + System.out.println("cos(" + userValue1 + ") = " + cos + "\n"); break; - case "tan": + case "13": Tangent tangent = new Tangent(); Double tan = tangent.tangent(userValue1); - System.out.println("tan(" + userValue1 + ") = " + tan); + System.out.println("tan(" + userValue1 + ") = " + tan + "\n"); break; - case "13": + case "14": InverseSine inverseSine = new InverseSine(); Double inverseSin = inverseSine.inverseSine(userValue1); - System.out.println("sin(" + userValue1 + ")^-1 = " + inverseSin); + System.out.println("sin(" + userValue1 + ")^-1 = " + inverseSin + "\n"); break; - case "14": + case "15": InverseCosine inverseCosine = new InverseCosine(); Double inverseCos = inverseCosine.inverseCosine(userValue1); - System.out.println("cos(" + userValue1 + ")^-1 = " + inverseCos); + System.out.println("cos(" + userValue1 + ")^-1 = " + inverseCos + "\n"); break; - case "15": + case "16": InverseTangent inverseTangent = new InverseTangent(); Double inverseTan = inverseTangent.inverseTangent(userValue1); - System.out.println("tan(" + userValue1 + ")^-1 = " + inverseTan); + System.out.println("tan(" + userValue1 + ")^-1 = " + inverseTan + "\n"); break; - case "16": + case "17": Logarithm logarithm = new Logarithm(); Double log = logarithm.logarithm(userValue1); if (log != null) - System.out.println("Log(" + userValue1 + ") = " + log); + System.out.println("Log(" + userValue1 + ") = " + log + "\n"); break; - case "17": + case "18": InverseLogarithm inverseLogarithm = new InverseLogarithm(); Double inverseLog = inverseLogarithm.inverseLogarithm(userValue1); if (inverseLog != null) - System.out.println("10^" + userValue1 + " = " + inverseLog); + System.out.println("10^" + userValue1 + " = " + inverseLog + "\n"); break; - case "18": + case "19": NaturalLogarithm naturalLogarithm = new NaturalLogarithm(); Double naturalLog = naturalLogarithm.naturalLogarithm(userValue1); if(naturalLog != null) - System.out.println("ln(" + userValue1 + ") = " + naturalLog); + System.out.println("ln(" + userValue1 + ") = " + naturalLog + "\n"); break; - case "19": + case "20": InverseNaturalLogarithm inverseNaturalLogarithm = new InverseNaturalLogarithm(); Double inverseNatLog = inverseNaturalLogarithm.inverseNaturalLogarithm(userValue1); - System.out.println("e^" + userValue1 + " = " + inverseNatLog); + System.out.println("e^" + userValue1 + " = " + inverseNatLog + "\n"); break; + } } } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 746fe51d..6319064f 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -29,4 +29,7 @@ public static Integer getIntegerInput(String prompt) { public static Double getDoubleInput(String prompt) { return Double.parseDouble(getStringInput(prompt)); } + + + } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java b/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java deleted file mode 100644 index b6ab6b02..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/DegreesToRadians.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; -import java.util.Scanner; - -public class DegreesToRadians { - Scanner scanner = new Scanner(System.in); - String degreesRadians; - - public String degreesToRadians() { - boolean D2R = true; - - while (D2R) { - String userOperator = ""; - while(!userOperator.equals("degrees") || !userOperator.equals("radians")){ - System.out.println("Pick between degrees or radians"); - userOperator = scanner.nextLine(); - switch (userOperator){ - case "degrees": - degreesRadians = "degrees"; - break; - case "radians": - degreesRadians = "radians"; - break; - default: - System.out.println("ERROR: Please enter \"degrees\" or \"radians\"."); - } - }if(userOperator.equals("degrees") || userOperator.equals("radians")) break; - } - return degreesRadians; - } -} \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index cfe909cc..9885c769 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -12,29 +12,26 @@ public class MainApplication { public static void main(String[] args) { boolean turnOn = true; - //make a list of basic commands for calulator - - String[] basicCommands = {"1", "2", "3"}; - + //make a list of basic commands for calculator + String[] basicCommands = {"1", "2"}; //turn that array into a string List basicCommandsList = Arrays.asList(basicCommands); //call the scanner Scanner scanner = new Scanner(System.in); //welcome the user + Console console = new Console(); while (turnOn) { System.out.println("Hello! Welcome to the calculator main menu!\nWould you care for a drink?\n\n"); - System.out.println("What would you like to do?\nType \"cmd\" for commands."); + System.out.println("What would you like to do?"); + System.out.println("\"1\" - Run the Calculator"); + System.out.println("\"2\" - Turn off the Calculator"); String userCommand = scanner.nextLine(); while (!basicCommandsList.contains(userCommand)) { - if (userCommand.equals("cmd")) { - System.out.println("\"1\" - Run the Calculator"); - System.out.println("\"2\" - Switch between trig numerics"); - System.out.println("\"3\" - Turn Off the Calculator"); - } else if (basicCommandsList.contains(userCommand)) { + if (basicCommandsList.contains(userCommand)) { break; } else { System.out.println("ERROR: Invalid command.\n"); @@ -49,10 +46,6 @@ public static void main(String[] args) { calculator.runCalculator(); break; case "2": - DegreesToRadians degreesRadians = new DegreesToRadians(); - degreesRadians.degreesToRadians(); - break; - case "3": turnOn = false; break; } From 7f1e17d2bbec841d05346d4df3f263c1a56f2427 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 23:07:41 -0400 Subject: [PATCH 56/68] major overhaul to classes and tests --- .../scientificcalculator/Addition.java | 13 - .../scientificcalculator/Calculator.java | 47 +- .../scientificcalculator/Console.java | 140 ++++- .../scientificcalculator/Cosine.java | 14 - .../scientificcalculator/Division.java | 15 - .../scientificcalculator/Exponent.java | 13 - .../scientificcalculator/Factorial.java | 16 - .../scientificcalculator/InputChecker.java | 6 +- .../scientificcalculator/Inverse.java | 16 - .../scientificcalculator/InverseCosine.java | 15 - .../InverseLogarithm.java | 14 - .../InverseNaturalLogarithm.java | 9 - .../scientificcalculator/InverseSine.java | 15 - .../scientificcalculator/InverseTangent.java | 8 - .../scientificcalculator/Invert.java | 13 - .../scientificcalculator/Logarithm.java | 14 - .../scientificcalculator/MainApplication.java | 2 - .../scientificcalculator/Multiplication.java | 14 - .../NaturalLogarithm.java | 14 - .../scientificcalculator/Sine.java | 14 - .../scientificcalculator/Sqrt.java | 16 - .../scientificcalculator/Squared.java | 10 - .../scientificcalculator/Subtraction.java | 13 - .../scientificcalculator/Tangent.java | 14 - .../scientificcalculator/AdditionTest.java | 48 -- .../scientificcalculator/ConsoleTest.java | 514 ++++++++++++++++++ .../scientificcalculator/CosineTest.java | 75 --- .../scientificcalculator/DivisionTest.java | 45 -- .../scientificcalculator/ExponentTest.java | 45 -- .../scientificcalculator/FactorialTest.java | 69 --- .../InverseCosineTest.java | 60 -- .../InverseLogarithmTest.java | 46 -- .../InverseNaturalLogarithmTest.java | 45 -- .../scientificcalculator/InverseSineTest.java | 60 -- .../InverseTangentTest.java | 58 -- .../scientificcalculator/InverseTest.java | 46 -- .../scientificcalculator/InvertTest.java | 46 -- .../scientificcalculator/LogarithmTest.java | 46 -- .../MultiplicationTest.java | 47 -- .../NaturalLogarithmTest.java | 47 -- .../scientificcalculator/SineTest.java | 72 --- .../scientificcalculator/SqrtTest.java | 43 -- .../scientificcalculator/SquaredTest.java | 47 -- .../scientificcalculator/SubtractionTest.java | 45 -- .../scientificcalculator/TangentTest.java | 75 --- 45 files changed, 678 insertions(+), 1366 deletions(-) delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Cosine.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Division.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Factorial.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/InverseCosine.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/InverseLogarithm.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/InverseNaturalLogarithm.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/InverseSine.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/InverseTangent.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Invert.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Logarithm.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/NaturalLogarithm.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Sine.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Sqrt.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java delete mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/Tangent.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/CosineTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/DivisionTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/ExponentTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/FactorialTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InverseCosineTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InverseLogarithmTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InverseNaturalLogarithmTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InverseSineTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InverseTangentTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InverseTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InvertTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/LogarithmTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/MultiplicationTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/NaturalLogarithmTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/SineTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/SqrtTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/SquaredTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java delete mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/TangentTest.java diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java deleted file mode 100644 index 9611f5f6..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Addition.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Addition{ - - public Addition(){ - } - - public double add(double value1 , double value2 ){ - return value1 + value2; - } -} - - diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index aa585748..59dfb85e 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -1,5 +1,6 @@ package com.zipcodewilmington.scientificcalculator; + import java.util.Arrays; import java.util.List; import java.util.Scanner; @@ -20,9 +21,10 @@ class Calculator { void runCalculator() { while (true) { + //ask the user for a operator System.out.println("Choose your Operator\nType \"cmd\" for commands."); String userOperator = scanner.nextLine(); - //ask the user for a operator + while (!operatorsList.contains(userOperator)) { //provide a list of commands if (userOperator.equals("cmd")) { @@ -93,29 +95,29 @@ void runCalculator() { //run the need2value operators INSIDE the if statement switch (userOperator) { case "1": - Addition add = new Addition(); + Console add = new Console(); double sum = add.add(userValue1, userValue2); System.out.println(userValue1 + " + " + userValue2 + " = " + sum + "\n"); break; case "2": - Subtraction subtract = new Subtraction(); + Console subtract = new Console(); Double difference = subtract.subtract(userValue1, userValue2); System.out.println(userValue1 + " - " + userValue2 + " = " + difference + "\n"); break; case "3": - Multiplication multiply = new Multiplication(); + Console multiply = new Console(); Double product = multiply.multiply(userValue1, userValue2); System.out.println(userValue1 + " * " + userValue2 + " = " + product + "\n"); break; case "4": - Division divide = new Division(); + Console divide = new Console(); Double quotient = divide.divide(userValue1, userValue2); if (quotient != null) { System.out.println(userValue1 + " / " + userValue2 + " = " + quotient + "\n"); } break; case "5": - Exponent exponent = new Exponent(); + Console exponent = new Console(); Double powerOf = exponent.exponent(userValue1, userValue2); System.out.println(userValue1 + " ^ " + userValue2 + " = " + powerOf + "\n"); break; @@ -123,86 +125,87 @@ void runCalculator() { } else if (!need2ValuesList.contains(userOperator)) { switch (userOperator) { case "6": - Squared squared = new Squared(); + Console squared = new Console(); Double powerOf = squared.squared(userValue1); System.out.println(userValue1 + " ^2 = " + powerOf + "\n"); break; case "7": - Sqrt sqrt = new Sqrt(); + Console sqrt = new Console(); Double squareRoot = sqrt.sqrt(userValue1); if (squareRoot != null) System.out.println("√" + userValue1 + " = " + squareRoot + "\n"); break; case "8": - Factorial factorial = new Factorial(); + Console factorial = new Console(); Double facto = factorial.factorial(userValue1); System.out.println("!" + userValue1 + " = " + facto + "\n"); break; case "9": - Inverse inverse = new Inverse(); + Console inverse = new Console(); Double inversed = inverse.inverse(userValue1); if (inversed != null) System.out.println("1/" + userValue1 + " = " + inversed + "\n"); break; case "10": - Invert invert = new Invert(); + Console invert = new Console(); Double inverted = invert.invert(userValue1); System.out.println(userValue1 + " inverted = " + inverted + "\n"); break; case "11": - Sine sine = new Sine(); + Console sine = new Console(); Double sin = sine.sine(userValue1); System.out.println("sin(" + userValue1 + ") = " + sin + "\n"); break; case "12": - Cosine cosine = new Cosine(); + Console cosine = new Console(); Double cos = cosine.cosine(userValue1); System.out.println("cos(" + userValue1 + ") = " + cos + "\n"); break; case "13": - Tangent tangent = new Tangent(); + Console tangent = new Console(); Double tan = tangent.tangent(userValue1); System.out.println("tan(" + userValue1 + ") = " + tan + "\n"); break; case "14": - InverseSine inverseSine = new InverseSine(); + Console inverseSine = new Console(); Double inverseSin = inverseSine.inverseSine(userValue1); System.out.println("sin(" + userValue1 + ")^-1 = " + inverseSin + "\n"); break; case "15": - InverseCosine inverseCosine = new InverseCosine(); + Console inverseCosine = new Console(); Double inverseCos = inverseCosine.inverseCosine(userValue1); System.out.println("cos(" + userValue1 + ")^-1 = " + inverseCos + "\n"); break; case "16": - InverseTangent inverseTangent = new InverseTangent(); + Console inverseTangent = new Console(); Double inverseTan = inverseTangent.inverseTangent(userValue1); System.out.println("tan(" + userValue1 + ")^-1 = " + inverseTan + "\n"); break; case "17": - Logarithm logarithm = new Logarithm(); + Console logarithm = new Console(); Double log = logarithm.logarithm(userValue1); if (log != null) System.out.println("Log(" + userValue1 + ") = " + log + "\n"); break; case "18": - InverseLogarithm inverseLogarithm = new InverseLogarithm(); + Console inverseLogarithm = new Console(); Double inverseLog = inverseLogarithm.inverseLogarithm(userValue1); if (inverseLog != null) System.out.println("10^" + userValue1 + " = " + inverseLog + "\n"); break; case "19": - NaturalLogarithm naturalLogarithm = new NaturalLogarithm(); + System.out.println("OuT Of OrDEr!$$!#"); + /*Console naturalLogarithm = new Console(); Double naturalLog = naturalLogarithm.naturalLogarithm(userValue1); if(naturalLog != null) System.out.println("ln(" + userValue1 + ") = " + naturalLog + "\n"); + */ break; case "20": - InverseNaturalLogarithm inverseNaturalLogarithm = new InverseNaturalLogarithm(); + Console inverseNaturalLogarithm = new Console(); Double inverseNatLog = inverseNaturalLogarithm.inverseNaturalLogarithm(userValue1); System.out.println("e^" + userValue1 + " = " + inverseNatLog + "\n"); break; - } } } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 6319064f..aff304cd 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -18,8 +18,7 @@ public static void println(String output, Object... args) { public static String getStringInput(String prompt) { Scanner scanner = new Scanner(System.in); println(prompt); - String userInput = scanner.nextLine(); - return userInput; + return scanner.nextLine(); } public static Integer getIntegerInput(String prompt) { @@ -30,6 +29,143 @@ public static Double getDoubleInput(String prompt) { return Double.parseDouble(getStringInput(prompt)); } + Double add(double value1, double value2) { + return value1 + value2; + } + + Double subtract(double value1, double value2) { + return value1 - value2; + } + + Double multiply(double value1, double value2) { + return value1 * value2; + } + + Double divide(double value1, double value2) { + if (value2 == 0) { + System.out.println("ERROR: Cannot divide by 0."); + return null; + } else { + return value1 / value2; + } + } + + Double exponent(double value1, double value2) { + return Math.pow(value1, value2); + } + + Double cosine(double value) { + if (value < 0) { + return Math.cos(-value); + } else { + return Math.cos(value); + } + } + + Double factorial(Double value1) { + double facto = 1; + for (int i = 1; i <= value1; i++) { + facto = facto * i; + } + return facto; + } + + Double inverse(Double value) { + if (value == 0) { + System.out.println("ERROR: Cannot have an inverse of 0."); + return null; + } else { + return 1 / value; + } + } + Double inverseCosine(double value) { + if (value <= 1 && value >= -1) { + return Math.acos(value); + } else { + System.out.println("ERROR: Please enter a number between -1 and 1."); + return null; + } + } + + Double inverseLogarithm(double value) { + if (value <= 0) { + System.out.println("ERROR: Please enter a number larger than 0."); + return null; + } else { + return Math.pow(10, value); + } + } + + Double inverseNaturalLogarithm(double value) { + return Math.exp(value); + } + Double inverseSine(double value) { + if (value <= 1 && value >= -1) { + return Math.asin(value); + } else { + System.out.println("ERROR: Please enter a number between -1 and 1."); + return null; + } + } + + Double inverseTangent(double value) { + return Math.atan(value); + } + + Double invert(double value1) { + return value1 * -1; + } + + Double logarithm(double value) { + if (value <= 0) { + System.out.println("ERROR: Please enter a number larger than 0."); + return null; + } else { + return Math.log(value); + } + } + + Double sine(double value) { + if (value < 0) { + return Math.sin(-value); + } else { + return Math.sin(value); + } + } + + Double sqrt(double value) { + if (value <= 0) { + System.out.println("ERROR: Please enter a positive number."); + return null; + } else { + return Math.sqrt(value); + } + } + + Double squared(double value1) { + return value1 * value1; + } + + Double tangent(double value) { + if (value < 0) { + return Math.tan(-value); + } else { + return Math.tan(value); + } + } +/* + Double naturalLogarithm(double value) { + if (value <= 0) { + System.out.println("ERROR: Please enter a number larger than 0."); + return null; + } else { + return (-Math.log(1 - value)) / value; + } + }*/ } + + + + diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Cosine.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Cosine.java deleted file mode 100644 index 6181ef53..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Cosine.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Cosine { - public Cosine() { - } - - public Double cosine(double value) { - if (value < 0) { - return Math.cos(-value); - } else { - return Math.cos(value); - } - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java deleted file mode 100644 index c6cdc6c0..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Division.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Division { - public Division(){ - } - - public Double divide(double value1, double value2){ - if(value2 == 0){ - System.out.println("ERROR: Cannot divide by 0."); - return null; - } else { - return value1 / value2; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java deleted file mode 100644 index b7e206f3..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Exponent.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Exponent{ - - public Exponent(){ - } - - public Double exponent(double value1, double value2){ - return Math.pow(value1, value2); - } -} - - diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Factorial.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Factorial.java deleted file mode 100644 index 001689b4..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Factorial.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Factorial { - public Factorial(){ - - } - - public Double factorial(Double value1){ - double facto = 1; - for(int i = 1; i <= value1; i++){ - facto = facto * i; - } - return facto; - } - } - diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java index b1f77b8d..e2ef44de 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java @@ -1,11 +1,7 @@ package com.zipcodewilmington.scientificcalculator; public class InputChecker { - - public InputChecker(){ - } - - public static boolean isNumeric(String str) { + static boolean isNumeric(String str) { try { Double.parseDouble(str); return true; diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java deleted file mode 100644 index d5cdc868..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Inverse.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Inverse { - - public Inverse(){ - } - - public Double inverse(Double value){ - if(value == 0){ - System.out.println("ERROR: Cannot have an inverse of 0."); - return null; - } else { - return 1/value; - } - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseCosine.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InverseCosine.java deleted file mode 100644 index c7328d34..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseCosine.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class InverseCosine { - - public InverseCosine(){ - } - public Double inverseCosine(double value){ - if(value <= 1 && value >= -1){ - return Math.acos(value); - } else { - System.out.println("ERROR: Please enter a number between -1 and 1."); - return null; - } - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseLogarithm.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InverseLogarithm.java deleted file mode 100644 index 9fa777e7..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseLogarithm.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class InverseLogarithm { - public InverseLogarithm() { - } - public Double inverseLogarithm(double value){ - if(value <= 0){ - System.out.println("ERROR: Please enter a number larger than 0."); - return null; - } else { - return Math.pow(10,value); - } - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseNaturalLogarithm.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InverseNaturalLogarithm.java deleted file mode 100644 index eed1f3de..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseNaturalLogarithm.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class InverseNaturalLogarithm { - public InverseNaturalLogarithm(){ - } - public Double inverseNaturalLogarithm(double value){ - return Math.exp(value); - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseSine.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InverseSine.java deleted file mode 100644 index e132fd3c..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseSine.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class InverseSine { - public InverseSine(){ - - } - public Double inverseSine(double value){ - if(value <= 1 && value >= -1){ - return Math.asin(value); - } else { - System.out.println("ERROR: Please enter a number between -1 and 1."); - return null; - } - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseTangent.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InverseTangent.java deleted file mode 100644 index fceba725..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/InverseTangent.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class InverseTangent { - public InverseTangent(){} - public Double inverseTangent(double value){ - return Math.atan(value); - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Invert.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Invert.java deleted file mode 100644 index c1609855..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Invert.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Invert { - - public Invert() { - } - - public Double invert(double value1) { - return value1 * -1; - } - - -} \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Logarithm.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Logarithm.java deleted file mode 100644 index de15f385..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Logarithm.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Logarithm { - public Logarithm(){ - } - public Double logarithm(double value){ - if(value <= 0){ - System.out.println("ERROR: Please enter a number larger than 0."); - return null; - } else { - return Math.log(value); - } - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 9885c769..9ed47b79 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -18,8 +18,6 @@ public static void main(String[] args) { List basicCommandsList = Arrays.asList(basicCommands); //call the scanner Scanner scanner = new Scanner(System.in); - //welcome the user - Console console = new Console(); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java deleted file mode 100644 index 6bb54e74..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Multiplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - - -public class Multiplication{ - - public Multiplication(){ - } - - public Double multiply(double value1, double value2){ - return value1 * value2; - } -} - - diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/NaturalLogarithm.java b/src/main/java/com/zipcodewilmington/scientificcalculator/NaturalLogarithm.java deleted file mode 100644 index ff48569a..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/NaturalLogarithm.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class NaturalLogarithm { - public NaturalLogarithm(){ - } - public Double naturalLogarithm(Double value){ - if(value <= 0){ - System.out.println("ERROR: Please enter a number larger than 0."); - return null; - } else { - return (-Math.log((1-value)/value)); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Sine.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Sine.java deleted file mode 100644 index 4238345a..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Sine.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Sine { - public Sine() { - } - - public Double sine(double value) { - if (value < 0) { - return Math.sin(-value); - } else { - return Math.sin(value); - } - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Sqrt.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Sqrt.java deleted file mode 100644 index 506cdfe8..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Sqrt.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Sqrt { - - public Sqrt() { - } - - public Double sqrt(double value) { - if (value <= 0) { - System.out.println("ERROR: Please enter a positive number."); - return null; - } else { - return Math.sqrt(value); - } - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java deleted file mode 100644 index 6df6db4b..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Squared.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Squared{ - - public Squared(){ - } - public Double squared(double value1) { - return value1 * value1; - } -} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java deleted file mode 100644 index 153a1664..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Subtraction.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - - public class Subtraction{ - - public Subtraction(){ - } - - public Double subtract(double value1, double value2){ - return value1 - value2; - } -} - - diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Tangent.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Tangent.java deleted file mode 100644 index 6c4e9336..00000000 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Tangent.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -public class Tangent { - public Tangent() { - } - - public Double tangent(double value) { - if (value < 0) { - return Math.tan(-value); - } else { - return Math.tan(value); - } - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java deleted file mode 100644 index 19c98c47..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/AdditionTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class AdditionTest { - - @Before - public void setUp() throws Exception { - } - - @Test - public void additionTest() { - // given - Addition result = new Addition(); - double inputValue1 = 5; - double inputValue2 = 5; - double expected = inputValue1 + inputValue2; - - // when - double actual = result.add(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } - - - @Test - public void additionTest2() { - // given - Addition result = new Addition() ; - double inputValue1 = 10; - double inputValue2 = 10; - double expected = inputValue1 + inputValue2; - - // when - double actual = result.add(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } - - @Test - public void testAddition() { - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java new file mode 100644 index 00000000..6ba73c05 --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java @@ -0,0 +1,514 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class ConsoleTest { + + Console result = new Console(); + + @Test + public void additionTest1() { + // given + double inputValue1 = 10.0; + double inputValue2 = 10.0; + double expected = inputValue1 + inputValue2; + // when + double actual = result.add(inputValue1, inputValue2); + // then + Assert.assertEquals(expected, actual, 0.0); + } + + @Test + public void additionTest2() { + double inputValue1 = 5.0; + double inputValue2 = 5.0; + double expected = inputValue1 + inputValue2; + double actual = result.add(inputValue1, inputValue2); + Assert.assertEquals(expected, actual, 0.0); + } + + @Test + public void additionTest3() { + double inputValue1 = 17.9; + double inputValue2 = 88.5; + double expected = inputValue1 + inputValue2; + double actual = result.add(inputValue1, inputValue2); + Assert.assertEquals(expected, actual, 0.0); + } + + @Test + public void subtractionTest1() { + double inputValue1 = 2; + double inputValue2 = 3; + double expected = inputValue1 - inputValue2; + double actual = result.subtract(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void subtractionTest2() { + double inputValue1 = 3; + double inputValue2 = 2; + double expected = inputValue1 - inputValue2; + double actual = result.subtract(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void subtractionTest3() { + double inputValue1 = 97.4; + double inputValue2 = 44.3; + double expected = inputValue1 - inputValue2; + double actual = result.subtract(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void multiplicationTest1() { + double inputValue1 = 2; + double inputValue2 = 3; + double expected = inputValue1 * inputValue2; + double actual = result.multiply(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void multiplicationTest2() { + double inputValue1 = 7; + double inputValue2 = 3; + double expected = inputValue1 * inputValue2; + double actual = result.multiply(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void multiplicationTest3() { + double inputValue1 = 99.3; + double inputValue2 = 129.4545; + double expected = inputValue1 * inputValue2; + double actual = result.multiply(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void divideTest1() { + double inputValue1 = 4; + double inputValue2 = 2; + double expected = inputValue1 / inputValue2; + double actual = result.divide(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void divideTest2() { + double inputValue1 = 15; + double inputValue2 = 5; + double expected = inputValue1 / inputValue2; + double actual = result.divide(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void divideTest3() { + double inputValue1 = 34736.3463; + double inputValue2 = 8376346.235; + double expected = inputValue1 / inputValue2; + double actual = result.divide(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void exponent1() { + double inputValue1 = 2; + double inputValue2 = 3; + double expected = Math.pow(inputValue1, inputValue2); + double actual = result.exponent(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void exponent2() { + double inputValue1 = 7; + double inputValue2 = 3; + double expected = Math.pow(inputValue1, inputValue2); + double actual = result.exponent(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void exponent3() { + double inputValue1 = 357; + double inputValue2 = 23; + double expected = Math.pow(inputValue1, inputValue2); + double actual = result.exponent(inputValue1, inputValue2); + assertEquals(expected, actual, .00); + } + + @Test + public void cosineTest1() { + double inputValue = 45; + double expected; + expected = Math.cos(inputValue); + double actual = result.cosine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void cosineTest2() { + double inputValue = 0; + double expected; + expected = Math.cos(inputValue); + double actual = result.cosine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void cosineTest3() { + double inputValue = -180; + double expected; + expected = Math.cos(-inputValue); + double actual = result.cosine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void factorialTest1() { + double inputValue = 5; + double expected = 1; + for (int i = 1; i <= inputValue; i++) { + expected = expected * i; + } + Double actual = result.factorial(inputValue); + assertEquals(expected, actual, 0); + } + + @Test + public void factorialTest2() { + double inputValue = 10; + double expected = 1; + for (int i = 1; i <= inputValue; i++) { + expected = expected * i; + } + double actual = result.factorial(inputValue); + assertEquals(expected, actual, 0); + } + + @Test + public void factorialTest3() { + double inputValue = 1; + double expected = 1; + for (int i = 1; i <= inputValue; i++) { + expected = expected * i; + } + double actual = result.factorial(inputValue); + assertEquals(expected, actual, 0); + } + + @Test + public void inverseTest1() { + double inputValue = 4; + double expected = 1 / inputValue; + double actual = result.inverse(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseTest2() { + double inputValue = 15; + double expected = 1 / inputValue; + double actual = result.inverse(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseTest3() { + double inputValue = 76; + double expected = 1 / inputValue; + double actual = result.inverse(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseCosineTest1() { + double inputValue = 1; + double expected = Math.acos(inputValue); + double actual = result.inverseCosine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void inverseCosineTest2() { + double inputValue = -1; + double expected = Math.acos(inputValue); + double actual = result.inverseCosine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void inverseCosineTest3() { + double inputValue = 0; + double expected = Math.acos(inputValue); + double actual = result.inverseCosine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void inverseLogarithmTest1() { + double inputValue = 1; + double expected = Math.pow(10, inputValue); + double actual = result.inverseLogarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseLogarithmTest2() { + double inputValue = 45; + double expected = Math.pow(10, inputValue); + double actual = result.inverseLogarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseLogarithmTest3() { + double inputValue = 180; + double expected = Math.pow(10, inputValue); + double actual = result.inverseLogarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseNaturalLogarithmTest1() { + double inputValue = 1; + double expected = Math.exp(inputValue); + double actual = result.inverseNaturalLogarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseNaturalLogarithmTest2() { + double inputValue = 45; + double expected = Math.exp(inputValue); + double actual = result.inverseNaturalLogarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseNaturalLogarithmTest3() { + double inputValue = -180; + double expected = Math.exp(inputValue); + double actual = result.inverseNaturalLogarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void inverseSineTest1() { + double inputValue = 1; + double expected = Math.asin(inputValue); + double actual = result.inverseSine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void inverseSineTest2() { + Console result = new Console(); + double inputValue = -1; + double expected = Math.asin(inputValue); + double actual = result.inverseSine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void inverseSineTest3() { + double inputValue = 0; + double expected = Math.asin(inputValue); + double actual = result.inverseSine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void inverseTangentTest1() { + double inputValue = 90; + double expected = Math.atan(inputValue); + double actual = result.inverseTangent(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void inverseTangentTest2() { + double inputValue = 0; + double expected = Math.atan(inputValue); + double actual = result.inverseTangent(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void inverseTangentTest3() { + double inputValue = -180; + double expected = Math.atan(inputValue); + double actual = result.inverseTangent(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void invertTest1() { + double inputValue = 2; + double expected = -1 * inputValue; + double actual = result.invert(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void invertTest2() { + double inputValue = 17; + double expected = -1 * inputValue; + double actual = result.invert(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void invertTest3() { + double inputValue = 361.25; + double expected = -1 * inputValue; + double actual = result.invert(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void LogarithmTest1() { + double inputValue = 1; + double expected = Math.log(inputValue); + double actual = result.logarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void LogarithmTest2() { + double inputValue = 45; + double expected = Math.log(inputValue); + double actual = result.logarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void LogarithmTest3() { + double inputValue = 180; + double expected = Math.log(inputValue); + double actual = result.logarithm(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void sineTest1() { + double inputValue = 90; + double expected = Math.sin(inputValue); + double actual = result.sine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void sineTest2() { + double inputValue = 45; + double expected = Math.sin(inputValue); + double actual = result.sine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void sineTest3() { + double inputValue = -180; + double expected = Math.sin(-inputValue); + double actual = result.sine(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void sqrt1() { + double inputValue1 = 2; + double expected = Math.sqrt(inputValue1); + double actual = result.sqrt(inputValue1); + assertEquals(expected, actual, .00); + } + + @Test + public void sqrt2() { + double inputValue1 = 7; + double expected = Math.sqrt(inputValue1); + double actual = result.sqrt(inputValue1); + assertEquals(expected, actual, .00); + } + + @Test + public void sqrt3() { + double inputValue1 = 9; + double expected = Math.sqrt(inputValue1); + double actual = result.sqrt(inputValue1); + assertEquals(expected, actual, .00); + } + + @Test + public void squaredTest1() { + double inputValue = 2; + double expected = inputValue * inputValue; + double actual = result.squared(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void squaredTest2() { + double inputValue = 7; + double expected = inputValue * inputValue; + double actual = result.squared(inputValue); + assertEquals(expected, actual, .00); + } + + @Test + public void tangentTest1() { + double inputValue = 45; + double expected = Math.tan(inputValue); + double actual = result.tangent(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void tangentTest2() { + double inputValue = 90; + double expected = Math.tan(inputValue); + double actual = result.tangent(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void tangentTest3() { + double inputValue = -180; + double expected = Math.tan(-inputValue); + double actual = result.tangent(inputValue); + assertEquals(expected, actual, .00000); + } +/* + @Test + public void naturalLogarithmTest1() { + double inputValue = -180; + double expected = (-Math.log(1 - inputValue)) / inputValue; + double actual = result.tangent(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void naturalLogarithmTest2() { + double inputValue = 0; + double expected = (-Math.log(1 - inputValue)) / inputValue; + double actual = result.tangent(inputValue); + assertEquals(expected, actual, .00000); + } + + @Test + public void naturalLogarithmTest3() { + double inputValue = 1; + double expected = (-Math.log(1 - inputValue)) / inputValue; + double actual = result.tangent(inputValue); + assertEquals(expected, actual, .00000); + }*/ +} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/CosineTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/CosineTest.java deleted file mode 100644 index 670a7f3d..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/CosineTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class CosineTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void cosineTest1() { - // given - Cosine result = new Cosine(); - double inputValue = 45; - double expected; - if(inputValue < 0) { - expected = Math.cos(-inputValue); - } else { - expected = Math.cos(inputValue); - } - - // when - double actual = result.cosine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void cosineTest2() { - // given - Cosine result = new Cosine(); - double inputValue = 90; - double expected; - if(inputValue < 0) { - expected = Math.cos(-inputValue); - } else { - expected = Math.cos(inputValue); - } - - // when - double actual = result.cosine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void cosineTest3() { - // given - Cosine result = new Cosine(); - double inputValue = -810; - double expected; - if(inputValue < 0) { - expected = Math.cos(-inputValue); - } else { - expected = Math.cos(inputValue); - } - - // when - double actual = result.cosine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/DivisionTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/DivisionTest.java deleted file mode 100644 index b7320033..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/DivisionTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import com.zipcodewilmington.scientificcalculator.Division; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class DivisionTest { - - - @Before - public void setUp() throws Exception { - } - - @Test - public void divideTest1() { - // given - Division result = new Division(); - double inputValue1 = 4; - double inputValue2 = 2; - double expected = inputValue1 / inputValue2; - - // when - double actual = result.divide(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } - - @Test - public void divideTest2() { - // given - Division result = new Division(); - double inputValue1 = 15; - double inputValue2 = 5; - double expected = inputValue1 / inputValue2; - - // when - double actual = result.divide(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } -} diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/ExponentTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/ExponentTest.java deleted file mode 100644 index 081d0584..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/ExponentTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class ExponentTest { - - @Before - public void setUp() throws Exception { - } - - @Test - public void exponent1() { - - // given - Exponent result = new Exponent(); - double inputValue1 = 2; - double inputValue2 = 3; - double expected = Math.pow(inputValue1, inputValue2); - - // when - double actual = result.exponent(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } - - - @Test - public void exponent2() { - // given - Exponent result = new Exponent(); - double inputValue1 = 7; - double inputValue2 = 3; - double expected = Math.pow(inputValue1, inputValue2); - - // when - double actual = result.exponent(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } -} diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/FactorialTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/FactorialTest.java deleted file mode 100644 index d31f5f18..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/FactorialTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class FactorialTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void factorialTest1() { - // given - Factorial result = new Factorial(); - double inputValue = 5; - double expected = 1; - for(int i = 1; i <= inputValue;i++){ - expected = expected * i; - } - - // when - Double actual = result.factorial(inputValue); - - // then - assertEquals(expected, actual, 0); - } - - @Test - public void factorialTest2() { - // given - Factorial result = new Factorial(); - double inputValue = 10; - double expected = 1; - for(int i = 1; i <= inputValue;i++){ - expected = expected * i; - } - - // when - double actual = result.factorial(inputValue); - - // then - assertEquals(expected, actual, 0); - } - - @Test - public void factorialTest3() { - // given - Factorial result = new Factorial(); - double inputValue = 1; - double expected = 1; - for(int i = 1; i <= inputValue;i++){ - expected = expected * i; - } - - // when - double actual = result.factorial(inputValue); - - // then - assertEquals(expected, actual, 0); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseCosineTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InverseCosineTest.java deleted file mode 100644 index a815ded0..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseCosineTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class InverseCosineTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void inverseCosineTest1() { - // given - InverseCosine result = new InverseCosine(); - double inputValue = 1; - double expected = Math.acos(inputValue); - - // when - double actual = result.inverseCosine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void inverseCosineTest2() { - // given - InverseCosine result = new InverseCosine(); - double inputValue = -1; - double expected = Math.acos(inputValue); - - // when - double actual = result.inverseCosine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void inverseCosineTest3() { - // given - InverseCosine result = new InverseCosine(); - double inputValue = 0; - double expected = Math.acos(inputValue); - - // when - double actual = result.inverseCosine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseLogarithmTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InverseLogarithmTest.java deleted file mode 100644 index f2e62842..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseLogarithmTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class InverseLogarithmTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void inverseLogarithmTest1() { - // given - InverseLogarithm result = new InverseLogarithm(); - Integer inputValue = 1; - double expected = Math.pow(10,inputValue); - - // when - double actual = result.inverseLogarithm(inputValue); - - // then - assertEquals(expected, actual, .00); - } - - @Test - public void inverseLogarithmTest2() { - // given - InverseLogarithm result = new InverseLogarithm(); - Integer inputValue = 45; - double expected = Math.pow(10,inputValue); - - // when - double actual = result.inverseLogarithm(inputValue); - - // then - assertEquals(expected, actual, .00); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseNaturalLogarithmTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InverseNaturalLogarithmTest.java deleted file mode 100644 index 4ac053d2..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseNaturalLogarithmTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class InverseNaturalLogarithmTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void inverseNaturalLogarithmTest1() { - // given - InverseNaturalLogarithm result = new InverseNaturalLogarithm(); - Integer inputValue = 1; - double expected = Math.exp(inputValue); - - // when - double actual = result.inverseNaturalLogarithm(inputValue); - - // then - assertEquals(expected, actual, .00); - } - @Test - public void inverseNaturalLogarithmTest2() { - // given - InverseNaturalLogarithm result = new InverseNaturalLogarithm(); - Integer inputValue = 45; - double expected = Math.exp(inputValue); - - // when - double actual = result.inverseNaturalLogarithm(inputValue); - - // then - assertEquals(expected, actual, .00); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseSineTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InverseSineTest.java deleted file mode 100644 index c871030b..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseSineTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class InverseSineTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void inverseSineTest1() { - // given - InverseSine result = new InverseSine(); - double inputValue = 1; - double expected = Math.asin(inputValue); - - // when - double actual = result.inverseSine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void inverseSineTest2() { - // given - InverseSine result = new InverseSine(); - double inputValue = -1; - double expected = Math.asin(inputValue); - - // when - double actual = result.inverseSine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void inverseSineTest3() { - // given - InverseSine result = new InverseSine(); - double inputValue = 0; - double expected = Math.asin(inputValue); - - // when - double actual = result.inverseSine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } -} diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTangentTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTangentTest.java deleted file mode 100644 index db91a431..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTangentTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class InverseTangentTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void inverseTangentTest1() { - // given - InverseTangent result = new InverseTangent(); - double inputValue = 90; - double expected = Math.atan(inputValue); - - // when - double actual = result.inverseTangent(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - @Test - public void inverseTangentTest2() { - // given - InverseTangent result = new InverseTangent(); - double inputValue = 0; - double expected = Math.atan(inputValue); - - // when - double actual = result.inverseTangent(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - @Test - public void inverseTangentTest3() { - // given - InverseTangent result = new InverseTangent(); - double inputValue = -180; - double expected = Math.atan(inputValue); - - // when - double actual = result.inverseTangent(inputValue); - - // then - assertEquals(expected, actual, .00000); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTest.java deleted file mode 100644 index 38b2f809..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/InverseTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class InverseTest { - - @Before - public void setUp() throws Exception { - } - - @Test - public void inverseTest1() { - // given - Inverse result = new Inverse(); - double inputValue = 4; - double expected = 1 / inputValue; - - // when - double actual = result.inverse(inputValue); - - // then - assertEquals(expected, actual, .00); - } - - @Test - public void inverseTest2() { - // given - Inverse result = new Inverse(); - double inputValue = 15; - double expected = 1 / inputValue; - - // when - double actual = result.inverse(inputValue); - - // then - assertEquals(expected, actual, .00); - } - - @After - public void tearDown() throws Exception { - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InvertTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InvertTest.java deleted file mode 100644 index 740e9184..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/InvertTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class InvertTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void multiplicationTest1() { - // given - Invert result = new Invert(); - double inputValue = 2; - double expected = -1 * inputValue; - - // when - double actual = result.invert(inputValue); - - // then - assertEquals(expected, actual, .00); - } - - @Test - public void multiplicationTest2() { - // given - Invert product = new Invert(); - double inputValue = 17; - double expected = -1 * inputValue; - - // when - double actual = product.invert(inputValue); - - // then - assertEquals(expected, actual, .00); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/LogarithmTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/LogarithmTest.java deleted file mode 100644 index 3e3cb684..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/LogarithmTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class LogarithmTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void LogarithmTest1() { - // given - Logarithm result = new Logarithm(); - Integer inputValue = 1; - double expected = Math.log(inputValue); - - // when - double actual = result.logarithm(inputValue); - - // then - assertEquals(expected, actual, .00); - } - - @Test - public void LogarithmTest2() { - // given - Logarithm result = new Logarithm(); - Integer inputValue = 45; - double expected = Math.log(inputValue); - - // when - double actual = result.logarithm(inputValue); - - // then - assertEquals(expected, actual, .00); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/MultiplicationTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/MultiplicationTest.java deleted file mode 100644 index cd03bade..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/MultiplicationTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import com.zipcodewilmington.scientificcalculator.Multiplication; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - - -public class MultiplicationTest { - - @Before - public void setUp() throws Exception { - } - - @Test - public void multiplicationTest1() { - // given - Multiplication result = new Multiplication(); - double inputValue1 = 2; - double inputValue2 = 3; - double expected = inputValue1 * inputValue2; - - // when - double actual = result.multiply(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } - - - @Test - public void multiplicationTest2() { - // given - Multiplication result = new Multiplication(); - double inputValue1 = 7; - double inputValue2 = 3; - double expected = inputValue1 * inputValue2; - - // when - double actual = result.multiply(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } -} - diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/NaturalLogarithmTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/NaturalLogarithmTest.java deleted file mode 100644 index 5d3dae24..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/NaturalLogarithmTest.java +++ /dev/null @@ -1,47 +0,0 @@ -/* -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class NaturalLogarithmTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void naturalLogarithmTest1() { - // given - NaturalLogarithm result = new NaturalLogarithm(); - double inputValue = 1; - double expected = -Math.log((1-inputValue)/inputValue); - - // when - double actual = result.naturalLogarithm(inputValue); - - // then - assertEquals(expected, actual, .00); - } - - @Test - public void naturalLogarithmTest2() { - // given - NaturalLogarithm result = new NaturalLogarithm(); - double inputValue = 45; - double expected = -Math.log((1-inputValue)/inputValue); - - // when - double actual = result.naturalLogarithm(inputValue); - - // then - assertEquals(expected, actual, .00); - } -}*/ \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/SineTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/SineTest.java deleted file mode 100644 index 99b44a29..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/SineTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class SineTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void sineTest1() { - // given - Sine result = new Sine(); - double inputValue = 90; - double expected; - if(inputValue < 0) { - expected = Math.sin(-inputValue); - } else { - expected = Math.sin(inputValue); - } - - // when - double actual = result.sine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - @Test - public void sineTest2() { - // given - Sine result = new Sine(); - double inputValue = 45; - double expected; - if(inputValue < 0) { - expected = Math.sin(-inputValue); - } else { - expected = Math.sin(inputValue); - } - // when - double actual = result.sine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void sineTest3() { - // given - Sine result = new Sine(); - double inputValue = -180; - double expected; - if(inputValue < 0) { - expected = Math.sin(-inputValue); - } else { - expected = Math.sin(inputValue); - } - // when - double actual = result.sine(inputValue); - - // then - assertEquals(expected, actual, .00000); - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/SqrtTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/SqrtTest.java deleted file mode 100644 index 3c54b681..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/SqrtTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class SqrtTest { - - @Before - public void setUp() throws Exception { - } - - @Test - public void sqrt1() { - - // given - Sqrt result = new Sqrt(); - double inputValue1 = 2; - double expected = Math.sqrt(inputValue1); - - // when - double actual = result.sqrt(inputValue1); - - // then - assertEquals(expected, actual, .00); - } - - - @Test - public void sqrt2() { - // given - Sqrt result = new Sqrt(); - double inputValue1 = 7; - double expected = Math.sqrt(inputValue1); - - // when - double actual = result.sqrt(inputValue1); - - // then - assertEquals(expected, actual, .00); - } -} diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/SquaredTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/SquaredTest.java deleted file mode 100644 index d3c069d5..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/SquaredTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class SquaredTest { - - @Before - public void setUp() throws Exception { - } - - @Test - public void squaredTest1() { - // given - Squared result = new Squared(); - double inputValue = 2; - double expected = inputValue * inputValue; - - // when - double actual = result.squared(inputValue); - - // then - assertEquals(expected, actual, .00); - } - - - @Test - public void multiplicationTest2() { - // given - Squared result = new Squared(); - double inputValue = 7; - double expected = inputValue * inputValue; - - // when - double actual = result.squared(inputValue); - - // then - assertEquals(expected, actual, .00); - } - - @After - public void tearDown() throws Exception { - } -} \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java deleted file mode 100644 index 20957dbb..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/SubtractionTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class SubtractionTest { - - @Before - public void setUp() throws Exception { - } - - @Test - public void subtractionTest1() { - // given - Subtraction result = new Subtraction(); - double inputValue1 = 2; - double inputValue2 = 3; - double expected = inputValue1 - inputValue2; - - // when - double actual = result.subtract(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } - - - @Test - public void subtractionTest2() { - // given - Subtraction result = new Subtraction(); - double inputValue1 = 3; - double inputValue2 = 2; - double expected = inputValue1 - inputValue2; - - // when - double actual = result.subtract(inputValue1,inputValue2); - - // then - assertEquals(expected, actual, .00); - } -} - diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/TangentTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/TangentTest.java deleted file mode 100644 index 839bdf9e..00000000 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/TangentTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.zipcodewilmington.scientificcalculator; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class TangentTest { - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void tangentTest1() { - // given - Tangent result = new Tangent(); - double inputValue = 45; - double expected; - if(inputValue < 0) { - expected = Math.tan(-inputValue); - } else { - expected = Math.tan(inputValue); - } - - // when - double actual = result.tangent(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void tangentTest2() { - // given - Tangent result = new Tangent(); - double inputValue = 90; - double expected; - if(inputValue < 0) { - expected = Math.tan(-inputValue); - } else { - expected = Math.tan(inputValue); - } - - // when - double actual = result.tangent(inputValue); - - // then - assertEquals(expected, actual, .00000); - } - - @Test - public void tangentTest3() { - // given - Tangent result = new Tangent(); - double inputValue = -180; - double expected; - if(inputValue < 0) { - expected = Math.tan(-inputValue); - } else { - expected = Math.tan(inputValue); - } - - // when - double actual = result.tangent(inputValue); - - // then - assertEquals(expected, actual, .00000); - } -} \ No newline at end of file From 6d1efa87a0f0bdbcb2fb30798bc31e300f420b85 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 23:11:29 -0400 Subject: [PATCH 57/68] final draft of the night. Still want to use the getStringInput and get DoubleInput methods --- .../com/zipcodewilmington/scientificcalculator/Calculator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 59dfb85e..d5afbf55 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -1,6 +1,5 @@ package com.zipcodewilmington.scientificcalculator; - import java.util.Arrays; import java.util.List; import java.util.Scanner; From 69d3c425dc88dd2e131b05f844b84833aa3993c5 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 23:31:16 -0400 Subject: [PATCH 58/68] added inputChecker test --- .../scientificcalculator/ConsoleTest.java | 4 +-- .../InputCheckerTest.java | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/zipcodewilmington/scientificcalculator/InputCheckerTest.java diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java index 6ba73c05..3933c17a 100644 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java @@ -7,7 +7,7 @@ public class ConsoleTest { - Console result = new Console(); + private Console result = new Console(); @Test public void additionTest1() { @@ -487,7 +487,7 @@ public void tangentTest3() { double actual = result.tangent(inputValue); assertEquals(expected, actual, .00000); } -/* +/*unable to figure out ln(x) @Test public void naturalLogarithmTest1() { double inputValue = -180; diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InputCheckerTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InputCheckerTest.java new file mode 100644 index 00000000..9e613756 --- /dev/null +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/InputCheckerTest.java @@ -0,0 +1,29 @@ +package com.zipcodewilmington.scientificcalculator; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class InputCheckerTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void isNumericTest1() { + boolean actual = InputChecker.isNumeric("213"); + assertTrue(actual); + } + @Test + public void isNumericTest2() { + boolean actual = InputChecker.isNumeric("pony"); + assertFalse(actual); + } +} \ No newline at end of file From 4fe1c9c3d7e235d4cd69d706ad4ebdc866189511 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Sun, 20 Oct 2019 23:57:53 -0400 Subject: [PATCH 59/68] incorporated Degrees and Radians --- .../scientificcalculator/Calculator.java | 36 +++++++++++++++---- .../scientificcalculator/Console.java | 20 +++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index d5afbf55..15a731ae 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -153,32 +153,56 @@ void runCalculator() { case "11": Console sine = new Console(); Double sin = sine.sine(userValue1); - System.out.println("sin(" + userValue1 + ") = " + sin + "\n"); + String trigFunction = Console.degreesRadians(); + if(trigFunction.equals("Radians")) + System.out.println("sin(" + userValue1 + ") = " + Math.toRadians(sin) + "\n"); + else + System.out.println("sin(" + userValue1 + ") = " + Math.toDegrees(sin) + "\n"); break; case "12": Console cosine = new Console(); Double cos = cosine.cosine(userValue1); - System.out.println("cos(" + userValue1 + ") = " + cos + "\n"); + trigFunction = Console.degreesRadians(); + if(trigFunction.equals("Radians")) + System.out.println("sin(" + userValue1 + ") = " + Math.toRadians(cos) + "\n"); + else + System.out.println("cos(" + userValue1 + ") = " + Math.toDegrees(cos) + "\n"); break; case "13": Console tangent = new Console(); Double tan = tangent.tangent(userValue1); - System.out.println("tan(" + userValue1 + ") = " + tan + "\n"); + trigFunction = Console.degreesRadians(); + if(trigFunction.equals("Radians")) + System.out.println("tan(" + userValue1 + ") = " + Math.toRadians(tan) + "\n"); + else + System.out.println("tan(" + userValue1 + ") = " + Math.toDegrees(tan) + "\n"); break; case "14": Console inverseSine = new Console(); Double inverseSin = inverseSine.inverseSine(userValue1); - System.out.println("sin(" + userValue1 + ")^-1 = " + inverseSin + "\n"); + trigFunction = Console.degreesRadians(); + if(trigFunction.equals("Radians")) + System.out.println("sin(" + userValue1 + ")^-1 = " + Math.toRadians(inverseSin) + "\n"); + else + System.out.println("sin(" + userValue1 + ")^-1 = " + Math.toDegrees(inverseSin) + "\n"); break; case "15": Console inverseCosine = new Console(); Double inverseCos = inverseCosine.inverseCosine(userValue1); - System.out.println("cos(" + userValue1 + ")^-1 = " + inverseCos + "\n"); + trigFunction = Console.degreesRadians(); + if(trigFunction.equals("Radians")) + System.out.println("cos(" + userValue1 + ")^-1 = " + Math.toRadians(inverseCos) + "\n"); + else + System.out.println("cos(" + userValue1 + ")^-1 = " + Math.toDegrees(inverseCos) + "\n"); break; case "16": Console inverseTangent = new Console(); Double inverseTan = inverseTangent.inverseTangent(userValue1); - System.out.println("tan(" + userValue1 + ")^-1 = " + inverseTan + "\n"); + trigFunction = Console.degreesRadians(); + if(trigFunction.equals("Radians")) + System.out.println("tan(" + userValue1 + ")^-1 = " + Math.toRadians(inverseTan) + "\n"); + else + System.out.println("tan(" + userValue1 + ")^-1 = " + Math.toDegrees(inverseTan) + "\n"); break; case "17": Console logarithm = new Console(); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index aff304cd..2cc35716 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -1,5 +1,6 @@ package com.zipcodewilmington.scientificcalculator; +import java.security.spec.RSAOtherPrimeInfo; import java.util.Scanner; /** @@ -164,6 +165,25 @@ Double naturalLogarithm(double value) { return (-Math.log(1 - value)) / value; } }*/ + + static String degreesRadians(){ + System.out.println("Would you like you answer in Radians or Degrees?"); + System.out.println("\"1\" - Radians"); + System.out.println("\"2\" - Degrees"); + Scanner scanner = new Scanner(System.in); + String userInput = scanner.nextLine(); + while(true) + switch (userInput){ + case "1": + return "Radians"; + case "2": + return "Degrees"; + default: + System.out.println("ERROR: Please enter \"1\" for Radians or \"2\" for Degrees."); + scanner = new Scanner(System.in); + userInput = scanner.nextLine(); + } + } } From 1af99c6aff471d1a25dceb036c659aade0aa2f3e Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 00:03:25 -0400 Subject: [PATCH 60/68] Wrapping up for the night --- .../zipcodewilmington/scientificcalculator/MainApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 9ed47b79..23e12d72 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -34,7 +34,7 @@ public static void main(String[] args) { } else { System.out.println("ERROR: Invalid command.\n"); } - System.out.println("What would you like to do?\nType \"cmd\" for commands."); + System.out.println("What would you like to do?"); userCommand = scanner.nextLine(); } From fd10c2860038eeacb387e2ac556dcc9fb3c4a76d Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 08:03:30 -0400 Subject: [PATCH 61/68] finished? --- .../zipcodewilmington/scientificcalculator/Calculator.java | 5 ++--- .../com/zipcodewilmington/scientificcalculator/Console.java | 2 +- .../scientificcalculator/MainApplication.java | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 15a731ae..f5703a0c 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -16,13 +16,12 @@ class Calculator { private String[] need2Values = {"1", "2", "3", "4", "5"}; //turn that array into a string private List need2ValuesList = Arrays.asList(need2Values); - private Integer pageNumber = 1; void runCalculator() { while (true) { //ask the user for a operator System.out.println("Choose your Operator\nType \"cmd\" for commands."); - String userOperator = scanner.nextLine(); + String userOperator = Console.getStringInput(": "); while (!operatorsList.contains(userOperator)) { //provide a list of commands @@ -57,7 +56,7 @@ void runCalculator() { System.out.println("ERROR: Invalid command\n"); } System.out.println("Choose your Operator\nType \"cmd\" for commands."); - userOperator = scanner.nextLine(); + userOperator = Console.getStringInput(": "); } if(userOperator.equals("return")){ break; diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 2cc35716..4a78ca69 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -18,7 +18,7 @@ public static void println(String output, Object... args) { public static String getStringInput(String prompt) { Scanner scanner = new Scanner(System.in); - println(prompt); + print(prompt); return scanner.nextLine(); } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 23e12d72..ffba80e2 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -26,7 +26,7 @@ public static void main(String[] args) { System.out.println("What would you like to do?"); System.out.println("\"1\" - Run the Calculator"); System.out.println("\"2\" - Turn off the Calculator"); - String userCommand = scanner.nextLine(); + String userCommand = Console.getStringInput(": "); while (!basicCommandsList.contains(userCommand)) { if (basicCommandsList.contains(userCommand)) { @@ -35,7 +35,7 @@ public static void main(String[] args) { System.out.println("ERROR: Invalid command.\n"); } System.out.println("What would you like to do?"); - userCommand = scanner.nextLine(); + userCommand = Console.getStringInput(": "); } switch (userCommand) { From 282f468a69f893133574b55091e49f55f9dceec5 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 08:32:48 -0400 Subject: [PATCH 62/68] implemented the console --- .../scientificcalculator/Calculator.java | 19 +++++++------- .../scientificcalculator/Console.java | 8 +++--- .../scientificcalculator/ConsoleTest.java | 25 +++++++++---------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index f5703a0c..a5e0bb65 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -65,14 +65,16 @@ void runCalculator() { //ask the user for a value System.out.println("Enter your value"); - String userValueAsString = scanner.nextLine(); + Double userValue = Console.getDoubleInput(":"); + String userValueAsString = userValue.toString(); boolean correctInput; //run a while loop that checks if a proper number was entered while (true) { correctInput = InputChecker.isNumeric(userValueAsString); if (correctInput) break; System.out.println("Enter your value"); - userValueAsString = scanner.nextLine(); + userValue = Console.getDoubleInput(":"); + userValueAsString = userValue.toString(); } double userValue1 = Double.parseDouble(userValueAsString); @@ -80,15 +82,16 @@ void runCalculator() { if (need2ValuesList.contains(userOperator)) { //ask for a second value System.out.println("Enter your second value"); - String userValue2AsString = scanner.nextLine(); + double userValue2 = Console.getDoubleInput(":"); + String userValue2AsString = Double.toString(userValue2);; //run a while loop that checks if a proper number was entered while(true) { - correctInput = InputChecker.isNumeric(userValueAsString); + correctInput = InputChecker.isNumeric(userValue2AsString); if(correctInput) break; System.out.println("Enter your second value"); - userValueAsString = scanner.nextLine(); + userValue = Console.getDoubleInput(":"); + userValue2AsString = userValue.toString(); } - double userValue2 = Double.parseDouble(userValue2AsString); //run the need2value operators INSIDE the if statement switch (userOperator) { @@ -216,12 +219,10 @@ void runCalculator() { System.out.println("10^" + userValue1 + " = " + inverseLog + "\n"); break; case "19": - System.out.println("OuT Of OrDEr!$$!#"); - /*Console naturalLogarithm = new Console(); + Console naturalLogarithm = new Console(); Double naturalLog = naturalLogarithm.naturalLogarithm(userValue1); if(naturalLog != null) System.out.println("ln(" + userValue1 + ") = " + naturalLog + "\n"); - */ break; case "20": Console inverseNaturalLogarithm = new Console(); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 4a78ca69..e6205c6e 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -124,7 +124,7 @@ Double logarithm(double value) { System.out.println("ERROR: Please enter a number larger than 0."); return null; } else { - return Math.log(value); + return Math.log10(value); } } @@ -156,15 +156,15 @@ Double tangent(double value) { return Math.tan(value); } } -/* + Double naturalLogarithm(double value) { if (value <= 0) { System.out.println("ERROR: Please enter a number larger than 0."); return null; } else { - return (-Math.log(1 - value)) / value; + return Math.log(value); } - }*/ + } static String degreesRadians(){ System.out.println("Would you like you answer in Radians or Degrees?"); diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java index 3933c17a..c4050761 100644 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java @@ -379,7 +379,7 @@ public void invertTest3() { @Test public void LogarithmTest1() { double inputValue = 1; - double expected = Math.log(inputValue); + double expected = Math.log10(inputValue); double actual = result.logarithm(inputValue); assertEquals(expected, actual, .00); } @@ -387,7 +387,7 @@ public void LogarithmTest1() { @Test public void LogarithmTest2() { double inputValue = 45; - double expected = Math.log(inputValue); + double expected = Math.log10(inputValue); double actual = result.logarithm(inputValue); assertEquals(expected, actual, .00); } @@ -395,7 +395,7 @@ public void LogarithmTest2() { @Test public void LogarithmTest3() { double inputValue = 180; - double expected = Math.log(inputValue); + double expected = Math.log10(inputValue); double actual = result.logarithm(inputValue); assertEquals(expected, actual, .00); } @@ -487,28 +487,27 @@ public void tangentTest3() { double actual = result.tangent(inputValue); assertEquals(expected, actual, .00000); } -/*unable to figure out ln(x) @Test public void naturalLogarithmTest1() { - double inputValue = -180; - double expected = (-Math.log(1 - inputValue)) / inputValue; - double actual = result.tangent(inputValue); + double inputValue = 7; + double expected = Math.log(inputValue); + double actual = result.naturalLogarithm(inputValue); assertEquals(expected, actual, .00000); } @Test public void naturalLogarithmTest2() { - double inputValue = 0; - double expected = (-Math.log(1 - inputValue)) / inputValue; - double actual = result.tangent(inputValue); + double inputValue = 3; + double expected = Math.log(inputValue); + double actual = result.naturalLogarithm(inputValue); assertEquals(expected, actual, .00000); } @Test public void naturalLogarithmTest3() { double inputValue = 1; - double expected = (-Math.log(1 - inputValue)) / inputValue; - double actual = result.tangent(inputValue); + double expected = Math.log(inputValue); + double actual = result.naturalLogarithm(inputValue); assertEquals(expected, actual, .00000); - }*/ + } } \ No newline at end of file From 4705c297bbf8862dddcddf2bc99e3da6fde72ad0 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 08:37:11 -0400 Subject: [PATCH 63/68] further cleaning --- .../zipcodewilmington/scientificcalculator/Calculator.java | 4 +--- .../zipcodewilmington/scientificcalculator/Console.java | 7 +++---- .../scientificcalculator/MainApplication.java | 3 --- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index a5e0bb65..0564e694 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -2,10 +2,8 @@ import java.util.Arrays; import java.util.List; -import java.util.Scanner; class Calculator { - private Scanner scanner = new Scanner(System.in); //create an array that includes all of the available operators private String[] operators = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13,", "14", "15", "16", @@ -83,7 +81,7 @@ void runCalculator() { //ask for a second value System.out.println("Enter your second value"); double userValue2 = Console.getDoubleInput(":"); - String userValue2AsString = Double.toString(userValue2);; + String userValue2AsString = Double.toString(userValue2); //run a while loop that checks if a proper number was entered while(true) { correctInput = InputChecker.isNumeric(userValue2AsString); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index e6205c6e..cc8fd9e2 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -1,6 +1,5 @@ package com.zipcodewilmington.scientificcalculator; -import java.security.spec.RSAOtherPrimeInfo; import java.util.Scanner; /** @@ -8,7 +7,7 @@ */ public class Console { - public static void print(String output, Object... args) { + private static void print(String output, Object... args) { System.out.printf(output, args); } @@ -16,7 +15,7 @@ public static void println(String output, Object... args) { print(output + "\n", args); } - public static String getStringInput(String prompt) { + static String getStringInput(String prompt) { Scanner scanner = new Scanner(System.in); print(prompt); return scanner.nextLine(); @@ -26,7 +25,7 @@ public static Integer getIntegerInput(String prompt) { return getDoubleInput(prompt).intValue(); } - public static Double getDoubleInput(String prompt) { + static Double getDoubleInput(String prompt) { return Double.parseDouble(getStringInput(prompt)); } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index ffba80e2..04f8513c 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.Scanner; /** * Created by leon on 2/9/18. @@ -16,8 +15,6 @@ public static void main(String[] args) { String[] basicCommands = {"1", "2"}; //turn that array into a string List basicCommandsList = Arrays.asList(basicCommands); - //call the scanner - Scanner scanner = new Scanner(System.in); From 831f5e85b76da81e57d0274cd13bc5d592ed8064 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 11:31:13 -0400 Subject: [PATCH 64/68] swapped expected and actual --- .../scientificcalculator/Calculator.java | 2 +- .../scientificcalculator/Console.java | 2 +- .../scientificcalculator/MainApplication.java | 2 +- .../scientificcalculator/ConsoleTest.java | 247 +++++++++--------- .../InputCheckerTest.java | 2 +- .../TestMainApplication.java | 2 +- 6 files changed, 127 insertions(+), 130 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 0564e694..28b29dcf 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.List; -class Calculator { +class Calculator extends MainApplication { //create an array that includes all of the available operators private String[] operators = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13,", "14", "15", "16", diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index cc8fd9e2..e0c12e6e 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -5,7 +5,7 @@ /** * Created by leon on 2/9/18. */ -public class Console { +public class Console extends MainApplication { private 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 04f8513c..a656465e 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -6,7 +6,7 @@ /** * Created by leon on 2/9/18. */ -public class MainApplication { +public class MainApplication extends InputChecker { public static void main(String[] args) { diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java index c4050761..86c12168 100644 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/ConsoleTest.java @@ -5,7 +5,7 @@ import static org.junit.Assert.*; -public class ConsoleTest { +public class ConsoleTest extends Console { private Console result = new Console(); @@ -14,9 +14,9 @@ public void additionTest1() { // given double inputValue1 = 10.0; double inputValue2 = 10.0; - double expected = inputValue1 + inputValue2; + double actual = inputValue1 + inputValue2; // when - double actual = result.add(inputValue1, inputValue2); + double expected = result.add(inputValue1, inputValue2); // then Assert.assertEquals(expected, actual, 0.0); } @@ -25,8 +25,8 @@ public void additionTest1() { public void additionTest2() { double inputValue1 = 5.0; double inputValue2 = 5.0; - double expected = inputValue1 + inputValue2; - double actual = result.add(inputValue1, inputValue2); + double actual = inputValue1 + inputValue2; + double expected = result.add(inputValue1, inputValue2); Assert.assertEquals(expected, actual, 0.0); } @@ -34,8 +34,8 @@ public void additionTest2() { public void additionTest3() { double inputValue1 = 17.9; double inputValue2 = 88.5; - double expected = inputValue1 + inputValue2; - double actual = result.add(inputValue1, inputValue2); + double actual = inputValue1 + inputValue2; + double expected = result.add(inputValue1, inputValue2); Assert.assertEquals(expected, actual, 0.0); } @@ -43,8 +43,8 @@ public void additionTest3() { public void subtractionTest1() { double inputValue1 = 2; double inputValue2 = 3; - double expected = inputValue1 - inputValue2; - double actual = result.subtract(inputValue1, inputValue2); + double actual = inputValue1 - inputValue2; + double expected = result.subtract(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -52,8 +52,8 @@ public void subtractionTest1() { public void subtractionTest2() { double inputValue1 = 3; double inputValue2 = 2; - double expected = inputValue1 - inputValue2; - double actual = result.subtract(inputValue1, inputValue2); + double actual = inputValue1 - inputValue2; + double expected = result.subtract(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -61,8 +61,8 @@ public void subtractionTest2() { public void subtractionTest3() { double inputValue1 = 97.4; double inputValue2 = 44.3; - double expected = inputValue1 - inputValue2; - double actual = result.subtract(inputValue1, inputValue2); + double actual = inputValue1 - inputValue2; + double expected = result.subtract(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -70,8 +70,8 @@ public void subtractionTest3() { public void multiplicationTest1() { double inputValue1 = 2; double inputValue2 = 3; - double expected = inputValue1 * inputValue2; - double actual = result.multiply(inputValue1, inputValue2); + double actual = inputValue1 * inputValue2; + double expected = result.multiply(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -79,8 +79,8 @@ public void multiplicationTest1() { public void multiplicationTest2() { double inputValue1 = 7; double inputValue2 = 3; - double expected = inputValue1 * inputValue2; - double actual = result.multiply(inputValue1, inputValue2); + double actual = inputValue1 * inputValue2; + double expected = result.multiply(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -88,8 +88,8 @@ public void multiplicationTest2() { public void multiplicationTest3() { double inputValue1 = 99.3; double inputValue2 = 129.4545; - double expected = inputValue1 * inputValue2; - double actual = result.multiply(inputValue1, inputValue2); + double actual = inputValue1 * inputValue2; + double expected = result.multiply(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -97,8 +97,8 @@ public void multiplicationTest3() { public void divideTest1() { double inputValue1 = 4; double inputValue2 = 2; - double expected = inputValue1 / inputValue2; - double actual = result.divide(inputValue1, inputValue2); + double actual = inputValue1 / inputValue2; + double expected = result.divide(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -106,8 +106,8 @@ public void divideTest1() { public void divideTest2() { double inputValue1 = 15; double inputValue2 = 5; - double expected = inputValue1 / inputValue2; - double actual = result.divide(inputValue1, inputValue2); + double actual = inputValue1 / inputValue2; + double expected = result.divide(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -115,8 +115,8 @@ public void divideTest2() { public void divideTest3() { double inputValue1 = 34736.3463; double inputValue2 = 8376346.235; - double expected = inputValue1 / inputValue2; - double actual = result.divide(inputValue1, inputValue2); + double actual = inputValue1 / inputValue2; + double expected = result.divide(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -124,8 +124,8 @@ public void divideTest3() { public void exponent1() { double inputValue1 = 2; double inputValue2 = 3; - double expected = Math.pow(inputValue1, inputValue2); - double actual = result.exponent(inputValue1, inputValue2); + double actual = Math.pow(inputValue1, inputValue2); + double expected = result.exponent(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -133,8 +133,8 @@ public void exponent1() { public void exponent2() { double inputValue1 = 7; double inputValue2 = 3; - double expected = Math.pow(inputValue1, inputValue2); - double actual = result.exponent(inputValue1, inputValue2); + double actual = Math.pow(inputValue1, inputValue2); + double expected = result.exponent(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @@ -142,172 +142,169 @@ public void exponent2() { public void exponent3() { double inputValue1 = 357; double inputValue2 = 23; - double expected = Math.pow(inputValue1, inputValue2); - double actual = result.exponent(inputValue1, inputValue2); + double actual = Math.pow(inputValue1, inputValue2); + double expected = result.exponent(inputValue1, inputValue2); assertEquals(expected, actual, .00); } @Test public void cosineTest1() { double inputValue = 45; - double expected; - expected = Math.cos(inputValue); - double actual = result.cosine(inputValue); + double actual = Math.cos(inputValue); + double expected = result.cosine(inputValue); assertEquals(expected, actual, .00000); } @Test public void cosineTest2() { double inputValue = 0; - double expected; - expected = Math.cos(inputValue); - double actual = result.cosine(inputValue); + double actual = Math.cos(inputValue); + double expected = result.cosine(inputValue); assertEquals(expected, actual, .00000); } @Test public void cosineTest3() { double inputValue = -180; - double expected; - expected = Math.cos(-inputValue); - double actual = result.cosine(inputValue); + double actual = Math.cos(-inputValue); + double expected = result.cosine(inputValue); assertEquals(expected, actual, .00000); } @Test public void factorialTest1() { double inputValue = 5; - double expected = 1; + double actual = 1; for (int i = 1; i <= inputValue; i++) { - expected = expected * i; + actual = actual * i; } - Double actual = result.factorial(inputValue); + double expected = result.factorial(inputValue); assertEquals(expected, actual, 0); } @Test public void factorialTest2() { double inputValue = 10; - double expected = 1; + double actual = 1; for (int i = 1; i <= inputValue; i++) { - expected = expected * i; + actual = actual * i; } - double actual = result.factorial(inputValue); + double expected = result.factorial(inputValue); assertEquals(expected, actual, 0); } @Test public void factorialTest3() { double inputValue = 1; - double expected = 1; + double actual = 1; for (int i = 1; i <= inputValue; i++) { - expected = expected * i; + actual = actual * i; } - double actual = result.factorial(inputValue); + double expected = result.factorial(inputValue); assertEquals(expected, actual, 0); } @Test public void inverseTest1() { double inputValue = 4; - double expected = 1 / inputValue; - double actual = result.inverse(inputValue); + double actual = 1 / inputValue; + double expected = result.inverse(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseTest2() { double inputValue = 15; - double expected = 1 / inputValue; - double actual = result.inverse(inputValue); + double actual = 1 / inputValue; + double expected = result.inverse(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseTest3() { double inputValue = 76; - double expected = 1 / inputValue; - double actual = result.inverse(inputValue); + double actual = 1 / inputValue; + double expected = result.inverse(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseCosineTest1() { double inputValue = 1; - double expected = Math.acos(inputValue); - double actual = result.inverseCosine(inputValue); + double actual = Math.acos(inputValue); + double expected = result.inverseCosine(inputValue); assertEquals(expected, actual, .00000); } @Test public void inverseCosineTest2() { double inputValue = -1; - double expected = Math.acos(inputValue); - double actual = result.inverseCosine(inputValue); + double actual = Math.acos(inputValue); + double expected = result.inverseCosine(inputValue); assertEquals(expected, actual, .00000); } @Test public void inverseCosineTest3() { double inputValue = 0; - double expected = Math.acos(inputValue); - double actual = result.inverseCosine(inputValue); + double actual = Math.acos(inputValue); + double expected = result.inverseCosine(inputValue); assertEquals(expected, actual, .00000); } @Test public void inverseLogarithmTest1() { double inputValue = 1; - double expected = Math.pow(10, inputValue); - double actual = result.inverseLogarithm(inputValue); + double actual = Math.pow(10, inputValue); + double expected = result.inverseLogarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseLogarithmTest2() { double inputValue = 45; - double expected = Math.pow(10, inputValue); - double actual = result.inverseLogarithm(inputValue); + double actual = Math.pow(10, inputValue); + double expected = result.inverseLogarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseLogarithmTest3() { double inputValue = 180; - double expected = Math.pow(10, inputValue); - double actual = result.inverseLogarithm(inputValue); + double actual = Math.pow(10, inputValue); + double expected = result.inverseLogarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseNaturalLogarithmTest1() { double inputValue = 1; - double expected = Math.exp(inputValue); - double actual = result.inverseNaturalLogarithm(inputValue); + double actual = Math.exp(inputValue); + double expected = result.inverseNaturalLogarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseNaturalLogarithmTest2() { double inputValue = 45; - double expected = Math.exp(inputValue); - double actual = result.inverseNaturalLogarithm(inputValue); + double actual = Math.exp(inputValue); + double expected = result.inverseNaturalLogarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseNaturalLogarithmTest3() { double inputValue = -180; - double expected = Math.exp(inputValue); - double actual = result.inverseNaturalLogarithm(inputValue); + double actual = Math.exp(inputValue); + double expected = result.inverseNaturalLogarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void inverseSineTest1() { double inputValue = 1; - double expected = Math.asin(inputValue); - double actual = result.inverseSine(inputValue); + double actual = Math.asin(inputValue); + double expected = result.inverseSine(inputValue); assertEquals(expected, actual, .00000); } @@ -315,199 +312,199 @@ public void inverseSineTest1() { public void inverseSineTest2() { Console result = new Console(); double inputValue = -1; - double expected = Math.asin(inputValue); - double actual = result.inverseSine(inputValue); + double actual = Math.asin(inputValue); + double expected = result.inverseSine(inputValue); assertEquals(expected, actual, .00000); } @Test public void inverseSineTest3() { double inputValue = 0; - double expected = Math.asin(inputValue); - double actual = result.inverseSine(inputValue); + double actual = Math.asin(inputValue); + double expected = result.inverseSine(inputValue); assertEquals(expected, actual, .00000); } @Test public void inverseTangentTest1() { double inputValue = 90; - double expected = Math.atan(inputValue); - double actual = result.inverseTangent(inputValue); + double actual = Math.atan(inputValue); + double expected = result.inverseTangent(inputValue); assertEquals(expected, actual, .00000); } @Test public void inverseTangentTest2() { double inputValue = 0; - double expected = Math.atan(inputValue); - double actual = result.inverseTangent(inputValue); + double actual = Math.atan(inputValue); + double expected = result.inverseTangent(inputValue); assertEquals(expected, actual, .00000); } @Test public void inverseTangentTest3() { double inputValue = -180; - double expected = Math.atan(inputValue); - double actual = result.inverseTangent(inputValue); + double actual = Math.atan(inputValue); + double expected = result.inverseTangent(inputValue); assertEquals(expected, actual, .00000); } @Test public void invertTest1() { double inputValue = 2; - double expected = -1 * inputValue; - double actual = result.invert(inputValue); + double actual = -1 * inputValue; + double expected = result.invert(inputValue); assertEquals(expected, actual, .00); } @Test public void invertTest2() { double inputValue = 17; - double expected = -1 * inputValue; - double actual = result.invert(inputValue); + double actual = -1 * inputValue; + double expected = result.invert(inputValue); assertEquals(expected, actual, .00); } @Test public void invertTest3() { double inputValue = 361.25; - double expected = -1 * inputValue; - double actual = result.invert(inputValue); + double actual = -1 * inputValue; + double expected = result.invert(inputValue); assertEquals(expected, actual, .00); } @Test public void LogarithmTest1() { double inputValue = 1; - double expected = Math.log10(inputValue); - double actual = result.logarithm(inputValue); + double actual = Math.log10(inputValue); + double expected = result.logarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void LogarithmTest2() { double inputValue = 45; - double expected = Math.log10(inputValue); - double actual = result.logarithm(inputValue); + double actual = Math.log10(inputValue); + double expected = result.logarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void LogarithmTest3() { double inputValue = 180; - double expected = Math.log10(inputValue); - double actual = result.logarithm(inputValue); + double actual = Math.log10(inputValue); + double expected = result.logarithm(inputValue); assertEquals(expected, actual, .00); } @Test public void sineTest1() { double inputValue = 90; - double expected = Math.sin(inputValue); - double actual = result.sine(inputValue); + double actual = Math.sin(inputValue); + double expected = result.sine(inputValue); assertEquals(expected, actual, .00000); } @Test public void sineTest2() { double inputValue = 45; - double expected = Math.sin(inputValue); - double actual = result.sine(inputValue); + double actual = Math.sin(inputValue); + double expected = result.sine(inputValue); assertEquals(expected, actual, .00000); } @Test public void sineTest3() { double inputValue = -180; - double expected = Math.sin(-inputValue); - double actual = result.sine(inputValue); + double actual = Math.sin(-inputValue); + double expected = result.sine(inputValue); assertEquals(expected, actual, .00000); } @Test public void sqrt1() { double inputValue1 = 2; - double expected = Math.sqrt(inputValue1); - double actual = result.sqrt(inputValue1); + double actual = Math.sqrt(inputValue1); + double expected = result.sqrt(inputValue1); assertEquals(expected, actual, .00); } @Test public void sqrt2() { double inputValue1 = 7; - double expected = Math.sqrt(inputValue1); - double actual = result.sqrt(inputValue1); + double actual = Math.sqrt(inputValue1); + double expected = result.sqrt(inputValue1); assertEquals(expected, actual, .00); } @Test public void sqrt3() { double inputValue1 = 9; - double expected = Math.sqrt(inputValue1); - double actual = result.sqrt(inputValue1); + double actual = Math.sqrt(inputValue1); + double expected = result.sqrt(inputValue1); assertEquals(expected, actual, .00); } @Test public void squaredTest1() { double inputValue = 2; - double expected = inputValue * inputValue; - double actual = result.squared(inputValue); + double actual = inputValue * inputValue; + double expected = result.squared(inputValue); assertEquals(expected, actual, .00); } @Test public void squaredTest2() { double inputValue = 7; - double expected = inputValue * inputValue; - double actual = result.squared(inputValue); + double actual = inputValue * inputValue; + double expected = result.squared(inputValue); assertEquals(expected, actual, .00); } @Test public void tangentTest1() { double inputValue = 45; - double expected = Math.tan(inputValue); - double actual = result.tangent(inputValue); + double actual = Math.tan(inputValue); + double expected = result.tangent(inputValue); assertEquals(expected, actual, .00000); } @Test public void tangentTest2() { double inputValue = 90; - double expected = Math.tan(inputValue); - double actual = result.tangent(inputValue); + double actual = Math.tan(inputValue); + double expected = result.tangent(inputValue); assertEquals(expected, actual, .00000); } @Test public void tangentTest3() { double inputValue = -180; - double expected = Math.tan(-inputValue); - double actual = result.tangent(inputValue); + double actual = Math.tan(-inputValue); + double expected = result.tangent(inputValue); assertEquals(expected, actual, .00000); } @Test public void naturalLogarithmTest1() { double inputValue = 7; - double expected = Math.log(inputValue); - double actual = result.naturalLogarithm(inputValue); + double actual = Math.log(inputValue); + double expected = result.naturalLogarithm(inputValue); assertEquals(expected, actual, .00000); } @Test public void naturalLogarithmTest2() { double inputValue = 3; - double expected = Math.log(inputValue); - double actual = result.naturalLogarithm(inputValue); + double actual = Math.log(inputValue); + double expected = result.naturalLogarithm(inputValue); assertEquals(expected, actual, .00000); } @Test public void naturalLogarithmTest3() { double inputValue = 1; - double expected = Math.log(inputValue); - double actual = result.naturalLogarithm(inputValue); + double actual = Math.log(inputValue); + double expected = result.naturalLogarithm(inputValue); assertEquals(expected, actual, .00000); } } \ No newline at end of file diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/InputCheckerTest.java b/src/test/java/com/zipcodewilmington/scientificcalculator/InputCheckerTest.java index 9e613756..19870761 100644 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/InputCheckerTest.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/InputCheckerTest.java @@ -6,7 +6,7 @@ import static org.junit.Assert.*; -public class InputCheckerTest { +public class InputCheckerTest extends InputChecker { @Before public void setUp() throws Exception { diff --git a/src/test/java/com/zipcodewilmington/scientificcalculator/TestMainApplication.java b/src/test/java/com/zipcodewilmington/scientificcalculator/TestMainApplication.java index e8ccb8dd..461ca103 100644 --- a/src/test/java/com/zipcodewilmington/scientificcalculator/TestMainApplication.java +++ b/src/test/java/com/zipcodewilmington/scientificcalculator/TestMainApplication.java @@ -3,5 +3,5 @@ /** * Created by leon on 2/9/18. */ -public class TestMainApplication { +public class TestMainApplication extends MainApplication { } From d29741e335bc22541864f80dd480dfa75a03fbc0 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 11:44:12 -0400 Subject: [PATCH 65/68] added a UML Diagram --- .DS_Store | Bin 0 -> 6148 bytes UML.png | Bin 0 -> 286302 bytes .../scientificcalculator/Console.java | 2 +- .../scientificcalculator/InputChecker.java | 2 +- .../scientificcalculator/MainApplication.java | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 .DS_Store create mode 100644 UML.png diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ac1b7398951d88251722691922751c4dc2fc7654 GIT binary patch literal 6148 zcmeHK!A=4(5Pb!L5HH-+TaS8h14I*zmxaK=gBSS##YK^11%r@y+>0OMkN87=0KRD} z%A!{_W+s_=?Q~|kecf!g08D#6XaF?;6{=vNO7n%txagV`f~QP0uErzoke;TKxmtK=y6}_n2_!B7EAv$rVTBwK$>fE}XChRB?_jTIk@67%^|)cYK-goXgn30}_mI zjWK4#8)||JY9A@>oVL%A38t(!`gn)lE1Iob#XaS*8?`?Pi1 zCega;maPWsAJ8A+(D_?jL&VjOF&>8Y+YNNoVAvENfnW}%;PeJ4R;hXR*vFr asuTLHG>CD)%p*M%{Sk09s8I%flz}%Yd};y! literal 0 HcmV?d00001 diff --git a/UML.png b/UML.png new file mode 100644 index 0000000000000000000000000000000000000000..49cb5e05ccdb81059ea47f8eedf26f473a823db0 GIT binary patch literal 286302 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�K7PA}bOSAagf?8>6lb5}MXsGAZfk6t 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 DnAdlwH!K;=ebub$$ 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 z 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 BoH+mh literal 0 HcmV?d00001 diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index e0c12e6e..e16347e9 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -5,7 +5,7 @@ /** * Created by leon on 2/9/18. */ -public class Console extends MainApplication { +public class Console extends Calculator { private static void print(String output, Object... args) { System.out.printf(output, args); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java b/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java index e2ef44de..ee9909e0 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/InputChecker.java @@ -1,6 +1,6 @@ package com.zipcodewilmington.scientificcalculator; -public class InputChecker { +public class InputChecker extends Calculator { static boolean isNumeric(String str) { try { Double.parseDouble(str); diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index a656465e..04f8513c 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -6,7 +6,7 @@ /** * Created by leon on 2/9/18. */ -public class MainApplication extends InputChecker { +public class MainApplication { public static void main(String[] args) { From e2ded278043129354a1729a635a0e11381421146 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 17:59:51 -0400 Subject: [PATCH 66/68] added features --- .DS_Store | Bin 6148 -> 6148 bytes .../scientificcalculator/Calculator.java | 57 +++++++++--------- .../scientificcalculator/Console.java | 20 +++--- .../scientificcalculator/FindAnAverage.java | 40 ++++++++++++ .../scientificcalculator/MainApplication.java | 16 +++-- .../scientificcalculator/ToTheMoon.java | 54 +++++++++++++++++ 6 files changed, 147 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/FindAnAverage.java create mode 100644 src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java diff --git a/.DS_Store b/.DS_Store index ac1b7398951d88251722691922751c4dc2fc7654..963faeba2b606da2cc446fa82e838064dd98b60f 100644 GIT binary patch delta 36 scmZoMXffDukZH0pa}YZ_LnwnUgU@6hX7$Z2%*`wl8=N<@bNuB80K!TNp8x;= delta 101 zcmZoMXffDukjYzefV>Qbe1;Mr%ZR~%!H~g{K^I6G07)Ytt-z27 omNNvh^%zWm;(83GU~xwV-^o(U>XQ#L1#Na?ZerQY&heKY0IduXk^lez diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java index 28b29dcf..fb8f1676 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Calculator.java @@ -2,8 +2,12 @@ import java.util.Arrays; import java.util.List; +import java.util.Scanner; + class Calculator extends MainApplication { + private Scanner scanner = new Scanner(System.in); + //create an array that includes all of the available operators private String[] operators = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13,", "14", "15", "16", @@ -19,7 +23,7 @@ void runCalculator() { while (true) { //ask the user for a operator System.out.println("Choose your Operator\nType \"cmd\" for commands."); - String userOperator = Console.getStringInput(": "); + String userOperator = Console.getStringInput(":"); while (!operatorsList.contains(userOperator)) { //provide a list of commands @@ -61,35 +65,30 @@ void runCalculator() { } - //ask the user for a value + //ask the user for a value + System.out.println("Enter your value"); + String userValue = Console.getStringInput(":"); + boolean correctInput; + //run a while loop that checks if a proper number was entered + while(true) { + correctInput = InputChecker.isNumeric(userValue); + if(correctInput) break; System.out.println("Enter your value"); - Double userValue = Console.getDoubleInput(":"); - String userValueAsString = userValue.toString(); - boolean correctInput; + userValue = Console.getStringInput(":"); + } + double userValue1 = Double.parseDouble(userValue); + if (need2ValuesList.contains(userOperator)) { + //ask for a second value + System.out.println("Enter your second value"); + userValue = Console.getStringInput(":"); //run a while loop that checks if a proper number was entered - while (true) { - correctInput = InputChecker.isNumeric(userValueAsString); - if (correctInput) break; - System.out.println("Enter your value"); - userValue = Console.getDoubleInput(":"); - userValueAsString = userValue.toString(); - - } - double userValue1 = Double.parseDouble(userValueAsString); - - if (need2ValuesList.contains(userOperator)) { - //ask for a second value + while(true) { + correctInput = InputChecker.isNumeric(userValue); + if(correctInput) break; System.out.println("Enter your second value"); - double userValue2 = Console.getDoubleInput(":"); - String userValue2AsString = Double.toString(userValue2); - //run a while loop that checks if a proper number was entered - while(true) { - correctInput = InputChecker.isNumeric(userValue2AsString); - if(correctInput) break; - System.out.println("Enter your second value"); - userValue = Console.getDoubleInput(":"); - userValue2AsString = userValue.toString(); - } + userValue = Console.getStringInput(":"); + } + double userValue2 = Double.parseDouble(userValue); //run the need2value operators INSIDE the if statement switch (userOperator) { @@ -231,4 +230,6 @@ void runCalculator() { } } } - } \ No newline at end of file + } + + diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index e16347e9..75ae09c4 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -1,5 +1,9 @@ package com.zipcodewilmington.scientificcalculator; +import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; +import org.w3c.dom.ls.LSOutput; + +import java.sql.SQLOutput; import java.util.Scanner; /** @@ -21,7 +25,7 @@ static String getStringInput(String prompt) { return scanner.nextLine(); } - public static Integer getIntegerInput(String prompt) { + private static Integer getIntegerInput(String prompt) { return getDoubleInput(prompt).intValue(); } @@ -165,22 +169,20 @@ Double naturalLogarithm(double value) { } } - static String degreesRadians(){ + static String degreesRadians() { System.out.println("Would you like you answer in Radians or Degrees?"); System.out.println("\"1\" - Radians"); System.out.println("\"2\" - Degrees"); - Scanner scanner = new Scanner(System.in); - String userInput = scanner.nextLine(); - while(true) - switch (userInput){ + String userInput = Console.getStringInput(":"); + while (true) + switch (userInput) { case "1": return "Radians"; case "2": return "Degrees"; default: System.out.println("ERROR: Please enter \"1\" for Radians or \"2\" for Degrees."); - scanner = new Scanner(System.in); - userInput = scanner.nextLine(); + userInput = Console.getStringInput(":"); } } } @@ -188,3 +190,5 @@ static String degreesRadians(){ + + diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/FindAnAverage.java b/src/main/java/com/zipcodewilmington/scientificcalculator/FindAnAverage.java new file mode 100644 index 00000000..edbfd91f --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/FindAnAverage.java @@ -0,0 +1,40 @@ +package com.zipcodewilmington.scientificcalculator; + +public class FindAnAverage { + static void findAnAverage() { + while (true) { + double sumOfAverageInputs = 0; + System.out.println("How many numbers would you like to find an average of?"); + System.out.println("Please enter \"return\" if you would like to quit."); + String userInputAverage = Console.getStringInput(":"); + if(userInputAverage.equals("return")) break; + boolean correctInput; + //run a while loop that checks if a proper number was entered + while (true) { + correctInput = InputChecker.isNumeric(userInputAverage); + if (correctInput) break; + System.out.println("Enter your value"); + userInputAverage = Console.getStringInput(":"); + } + int userInputAverageInt = Integer.parseInt(userInputAverage); + + for (int i = 1; i <= userInputAverageInt; i++) { + System.out.println("Enter a number."); + String averageInput = Console.getStringInput(":"); + if(averageInput.equals("return")) break; + while (true) { + correctInput = InputChecker.isNumeric(averageInput); + if (correctInput) break; + System.out.println("Enter your value"); + averageInput = Console.getStringInput(":"); + } + Integer averageInputInt = Integer.parseInt(averageInput); + sumOfAverageInputs += averageInputInt; + if(!averageInput.equals("return")) { + double average = sumOfAverageInputs / userInputAverageInt; + System.out.println("You average is " + average + "."); + } + } + } + } +} diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java index 04f8513c..878fa1ac 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/MainApplication.java @@ -12,7 +12,7 @@ public class MainApplication { public static void main(String[] args) { boolean turnOn = true; //make a list of basic commands for calculator - String[] basicCommands = {"1", "2"}; + String[] basicCommands = {"1", "2", "3","4"}; //turn that array into a string List basicCommandsList = Arrays.asList(basicCommands); @@ -22,8 +22,10 @@ public static void main(String[] args) { System.out.println("Hello! Welcome to the calculator main menu!\nWould you care for a drink?\n\n"); System.out.println("What would you like to do?"); System.out.println("\"1\" - Run the Calculator"); - System.out.println("\"2\" - Turn off the Calculator"); - String userCommand = Console.getStringInput(": "); + System.out.println("\"2\" - Find an Average"); + System.out.println("\"3\" - Fly to the Moon!!!"); + System.out.println("\"4\" - Turn off the Calculator"); + String userCommand = Console.getStringInput(":"); while (!basicCommandsList.contains(userCommand)) { if (basicCommandsList.contains(userCommand)) { @@ -32,7 +34,7 @@ public static void main(String[] args) { System.out.println("ERROR: Invalid command.\n"); } System.out.println("What would you like to do?"); - userCommand = Console.getStringInput(": "); + userCommand = Console.getStringInput(":"); } switch (userCommand) { @@ -41,6 +43,12 @@ public static void main(String[] args) { calculator.runCalculator(); break; case "2": + FindAnAverage.findAnAverage(); + break; + case"3": + ToTheMoon.toTheMoon(); + break; + case "4": turnOn = false; break; } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java b/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java new file mode 100644 index 00000000..35b71a30 --- /dev/null +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java @@ -0,0 +1,54 @@ +package com.zipcodewilmington.scientificcalculator; + +public class ToTheMoon { + + static void toTheMoon() { + System.out.println("BLAST OFF! You're flying to the moon!\n"); + System.out.println("Are you measuring your speed in km/h or mph?"); + System.out.println("\"1\" - km/h"); + System.out.println("\"2\" - mph"); + String userInput = Console.getStringInput(":"); + + String whilePrompt = "On"; + String mphKmh = ""; + while (whilePrompt.equals("On")) + switch (userInput) { + case "1": + mphKmh = "kmh"; + whilePrompt = "Off"; + break; + case "2": + mphKmh = "mph"; + whilePrompt = "Off"; + break; + default: + System.out.println("ERROR: Please enter \"1\" for Km/H or \"2\" for mph."); + userInput = Console.getStringInput(":"); + } + System.out.println("How fast are you traveling?"); + String speedString = Console.getStringInput(":"); + + boolean correctInput; + //run a while loop that checks if a proper number was entered + while (true) { + correctInput = InputChecker.isNumeric(speedString); + if (correctInput) break; + System.out.println("Enter your value"); + speedString = Console.getStringInput(":"); + } + int speed = Console.getDoubleInput(speedString).intValue();; + + switch (mphKmh){ + case "kmh": + int timeToMoon = speed / 384000; + System.out.println("You will get to the moon in " + timeToMoon + "hours!"); + break; + case "mph": + timeToMoon = speed / 225623; + System.out.println("You will get to the moon in " + timeToMoon + "hours!"); + break; + default: + System.out.println("Sorry. You're not going to the moon. You were just dreaming."); + } + } +} From 00cdf45d024e169ed47442d37b526c3aa716213c Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 18:19:01 -0400 Subject: [PATCH 67/68] Got to the moon --- .../com/zipcodewilmington/scientificcalculator/Console.java | 2 +- .../com/zipcodewilmington/scientificcalculator/ToTheMoon.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java index 75ae09c4..b84cb448 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/Console.java @@ -25,7 +25,7 @@ static String getStringInput(String prompt) { return scanner.nextLine(); } - private static Integer getIntegerInput(String prompt) { + static Integer getIntegerInput(String prompt) { return getDoubleInput(prompt).intValue(); } diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java b/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java index 35b71a30..e8114acc 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java @@ -36,11 +36,11 @@ static void toTheMoon() { System.out.println("Enter your value"); speedString = Console.getStringInput(":"); } - int speed = Console.getDoubleInput(speedString).intValue();; + double speed = Double.parseDouble(speedString); switch (mphKmh){ case "kmh": - int timeToMoon = speed / 384000; + double timeToMoon = speed / 384000; System.out.println("You will get to the moon in " + timeToMoon + "hours!"); break; case "mph": From 95f4339381ba595947cb0291c30c3e54c01dc501 Mon Sep 17 00:00:00 2001 From: Ron Duwell Date: Mon, 21 Oct 2019 18:29:43 -0400 Subject: [PATCH 68/68] fix average loop --- .../scientificcalculator/FindAnAverage.java | 13 +++++-------- .../scientificcalculator/ToTheMoon.java | 8 ++++---- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/FindAnAverage.java b/src/main/java/com/zipcodewilmington/scientificcalculator/FindAnAverage.java index edbfd91f..f3222c2d 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/FindAnAverage.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/FindAnAverage.java @@ -2,12 +2,10 @@ public class FindAnAverage { static void findAnAverage() { - while (true) { double sumOfAverageInputs = 0; System.out.println("How many numbers would you like to find an average of?"); System.out.println("Please enter \"return\" if you would like to quit."); String userInputAverage = Console.getStringInput(":"); - if(userInputAverage.equals("return")) break; boolean correctInput; //run a while loop that checks if a proper number was entered while (true) { @@ -25,16 +23,15 @@ static void findAnAverage() { while (true) { correctInput = InputChecker.isNumeric(averageInput); if (correctInput) break; - System.out.println("Enter your value"); + System.out.println("Enter a number"); averageInput = Console.getStringInput(":"); } Integer averageInputInt = Integer.parseInt(averageInput); sumOfAverageInputs += averageInputInt; - if(!averageInput.equals("return")) { - double average = sumOfAverageInputs / userInputAverageInt; - System.out.println("You average is " + average + "."); } + double average = sumOfAverageInputs / userInputAverageInt; + System.out.println("You average is " + average + "."); } } - } -} + + diff --git a/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java b/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java index e8114acc..88bc0ff1 100644 --- a/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java +++ b/src/main/java/com/zipcodewilmington/scientificcalculator/ToTheMoon.java @@ -40,12 +40,12 @@ static void toTheMoon() { switch (mphKmh){ case "kmh": - double timeToMoon = speed / 384000; - System.out.println("You will get to the moon in " + timeToMoon + "hours!"); + double timeToMoon = 384000 / speed; + System.out.println("You will get to the moon in " + Math.round(timeToMoon) + " hours!"); break; case "mph": - timeToMoon = speed / 225623; - System.out.println("You will get to the moon in " + timeToMoon + "hours!"); + timeToMoon = 225623 / speed; + System.out.println("You will get to the moon in " + Math.round(timeToMoon) + " hours!"); break; default: System.out.println("Sorry. You're not going to the moon. You were just dreaming.");