diff --git a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 84c04f21..39722c53 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -1,5 +1,6 @@ package htw.berlin.prog2.ha1; + /** * Eine Klasse, die das Verhalten des Online Taschenrechners imitiert, welcher auf * https://www.online-calculator.com/ aufgerufen werden kann (ohne die Memory-Funktionen) @@ -8,6 +9,8 @@ */ public class Calculator { + private boolean used = false; + private String screen = "0"; private double latestValue; @@ -45,9 +48,14 @@ public void pressDigitKey(int digit) { * im Ursprungszustand ist. */ public void pressClearKey() { - screen = "0"; - latestOperation = ""; - latestValue = 0.0; + if(!used){ + screen = "0"; + used = true; + } + else { + latestValue = 0.0; + latestOperation = ""; + } } /** @@ -81,6 +89,7 @@ public void pressUnaryOperationKey(String operation) { default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); + if(screen.equals("Infinity")) screen = "Error"; if(screen.equals("NaN")) screen = "Error"; if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); @@ -106,6 +115,7 @@ public void pressDotKey() { */ public void pressNegativeKey() { screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; + } /** @@ -130,4 +140,18 @@ public void pressEqualsKey() { if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); } + + public static void main(String[] args) { + double i = 55; + double b = 0; + + Calculator calc = new Calculator(); + + calc.pressDigitKey(1); + calc.pressBinaryOperationKey("/"); + calc.pressDigitKey(0); + calc.pressUnaryOperationKey("1/x"); + + System.out.println(calc.readScreen()); + } } diff --git a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index ddff0daf..b65728ba 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -56,6 +56,23 @@ void testDivisionByZero() { assertEquals(expected, actual); } + @Test + @DisplayName("should display the result after dividing two positive numbers") + void testDivisionPositiveNumbers() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(9); + calc.pressBinaryOperationKey("/"); + calc.pressDigitKey(3); + calc.pressEqualsKey(); + + String expected = "3"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test @DisplayName("should display error when drawing the square root of a negative number") void testSquareRootOfNegative() { @@ -88,7 +105,45 @@ void testMultipleDecimalDots() { assertEquals(expected, actual); } + @Test + @DisplayName("check press clear key") + void testClearKey() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("+"); + + calc.pressClearKey(); + calc.pressEqualsKey(); + + String expected = "5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + + + + //TODO hier weitere Tests erstellen + + @Test + @DisplayName("check inverse with division by zero") + void testPressNegative() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(1); + calc.pressBinaryOperationKey("/"); + calc.pressDigitKey(0); + calc.pressUnaryOperationKey("1/x"); + + String expected = "Error"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + + } }