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..898d25ef 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -60,8 +60,10 @@ public void pressClearKey() { * @param operation "+" für Addition, "-" für Substraktion, "x" für Multiplikation, "/" für Division */ public void pressBinaryOperationKey(String operation) { + if (!latestOperation.isEmpty()) pressEqualsKey(); latestValue = Double.parseDouble(screen); latestOperation = operation; + } /** @@ -110,7 +112,7 @@ public void pressNegativeKey() { /** * Empfängt den Befehl der gedrückten "="-Taste. - * Wurde zuvor keine Operationstaste gedrückt, passiert nichts. + * Wurde zuvor keine Operationstaste gedrückt, wird die Eingegebene Zahl auf dem Bildschirm ausgegeben. * Wurde zuvor eine binäre Operationstaste gedrückt und zwei Operanden eingegeben, wird das * Ergebnis der Operation angezeigt. Falls hierbei eine Division durch Null auftritt, wird "Error" angezeigt. * Wird die Taste weitere Male gedrückt (ohne andere Tasten dazwischen), so wird die letzte @@ -118,16 +120,32 @@ public void pressNegativeKey() { * und das Ergebnis direkt angezeigt. */ public void pressEqualsKey() { - var result = switch(latestOperation) { - case "+" -> latestValue + Double.parseDouble(screen); - case "-" -> latestValue - Double.parseDouble(screen); - case "x" -> latestValue * Double.parseDouble(screen); - case "/" -> latestValue / Double.parseDouble(screen); - default -> throw new IllegalArgumentException(); - }; - screen = Double.toString(result); - if(screen.equals("Infinity")) screen = "Error"; - if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); - if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + if (!latestOperation.isEmpty()) { + var result = switch (latestOperation) { + case "+" -> latestValue + Double.parseDouble(screen); + case "-" -> latestValue - Double.parseDouble(screen); + case "x" -> latestValue * Double.parseDouble(screen); + case "/" -> latestValue / Double.parseDouble(screen); + case "" -> Double.parseDouble(screen); + default -> throw new IllegalArgumentException(); + + + }; + screen = Double.toString(result); + if (screen.equals("Infinity")) screen = "Error"; + if (screen.endsWith(".0")) screen = screen.substring(0, screen.length() - 2); + if (screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + } else { + return; + } + + } + + + } + + + + 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..6ca259f2 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -88,7 +88,60 @@ void testMultipleDecimalDots() { assertEquals(expected, actual); } + @Test + @DisplayName("should display result after multiplying two numbers") + void testMultiplication() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(3); + calc.pressBinaryOperationKey("x"); + calc.pressDigitKey(4); + calc.pressEqualsKey(); + + String expected = "12"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + +// Teilaufgabe 2.1 +@Test +@DisplayName("should display latest number after pressing equals") +void testEqualKey() { + Calculator calc = new Calculator(); + calc.pressDigitKey(5); + calc.pressEqualsKey(); + + String expected = "5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + +} + // Teiaufgabe 2.2 + + @Test + @DisplayName("should display result after adding multiple positive multi-digit numbers") + void testPositiveAdditionWithMultipleDigits() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(7); + calc.pressDigitKey(0); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(1); + calc.pressDigitKey(0); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(7); + calc.pressDigitKey(0); + calc.pressEqualsKey(); + + String expected = "150"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } //TODO hier weitere Tests erstellen + }