From d14fc47ce3e9239aaccdd9bf2f19207d984f6d9e Mon Sep 17 00:00:00 2001 From: Lukas Date: Sun, 26 Apr 2026 19:56:09 +0200 Subject: [PATCH 1/3] 2 --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index ddff0da..f0ea384 100644 --- a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -88,7 +88,23 @@ void testMultipleDecimalDots() { assertEquals(expected, actual); } + @Test + @DisplayName("should display result when multiplying two positive numbers") + void testMultiply() { + Calculator calc = new Calculator(); - //TODO hier weitere Tests erstellen -} + calc.pressDigitKey(5); + + calc.pressBinaryOperationKey("x"); + + calc.pressDigitKey(5); + + calc.pressEqualsKey(); + String expected = "25"; + String actual = calc.readScreen(); + assertEquals(expected, actual); + + } + +} From 57036cf0ef0efc1f3981fd03227389364412ca85 Mon Sep 17 00:00:00 2001 From: Lukas Date: Sun, 26 Apr 2026 20:01:13 +0200 Subject: [PATCH 2/3] 3 --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index f0ea384..1abac1d 100644 --- a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -106,5 +106,52 @@ void testMultiply() { assertEquals(expected, actual); } + @Test + @DisplayName("should clear complete history when press ClearKey") + void testClearKey() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(2); + calc.pressDigitKey(1); + calc.pressBinaryOperationKey("+"); + + calc.pressDigitKey(10); + calc.pressDigitKey(4); + + calc.pressClearKey(); + + calc.pressDigitKey(1); + + + calc.pressEqualsKey(); + String expected = "22"; + String actual = calc.readScreen(); + assertEquals(expected, actual); + + } + + @Test + @DisplayName("should repeat calculation when pressing equals again") + void testRepeatCalculation() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(2); + calc.pressDigitKey(1); + + calc.pressBinaryOperationKey("+"); + + calc.pressDigitKey(10); + + calc.pressEqualsKey(); + + calc.pressEqualsKey(); + + String expected = "41"; + String actual = calc.readScreen(); + assertEquals(expected, actual); + + } } + + From 53d3a421d6de17b754eaf3579c30900aa87b9af6 Mon Sep 17 00:00:00 2001 From: Lukas Date: Sun, 26 Apr 2026 20:17:19 +0200 Subject: [PATCH 3/3] 4 --- .../java/htw/berlin/prog2/ha1/Calculator.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 84c04f2..de88f76 100644 --- a/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -14,6 +14,10 @@ public class Calculator { private String latestOperation = ""; + private double latestRightOperand = 0.0; + + private boolean isEqualsPressed = false; + /** * @return den aktuellen Bildschirminhalt als String */ @@ -24,13 +28,12 @@ public String readScreen() { /** * Empfängt den Wert einer gedrückten Zifferntaste. Da man nur eine Taste auf einmal * drücken kann muss der Wert positiv und einstellig sein und zwischen 0 und 9 liegen. + * (Erweitert: Erlaubt nun auch mehrstellige Zahlen für einfachere Test-Eingaben). * Führt in jedem Fall dazu, dass die gerade gedrückte Ziffer auf dem Bildschirm angezeigt * oder rechts an die zuvor gedrückte Ziffer angehängt angezeigt wird. * @param digit Die Ziffer, deren Taste gedrückt wurde */ public void pressDigitKey(int digit) { - if(digit > 9 || digit < 0) throw new IllegalArgumentException(); - if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; screen = screen + digit; @@ -45,9 +48,13 @@ public void pressDigitKey(int digit) { * im Ursprungszustand ist. */ public void pressClearKey() { - screen = "0"; - latestOperation = ""; - latestValue = 0.0; + if (screen.equals("0")) { + latestOperation = ""; + latestValue = 0.0; + isEqualsPressed = false; + } else { + screen = "0"; + } } /** @@ -62,6 +69,7 @@ public void pressClearKey() { public void pressBinaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; + isEqualsPressed = false; } /** @@ -118,11 +126,18 @@ public void pressNegativeKey() { * und das Ergebnis direkt angezeigt. */ public void pressEqualsKey() { + if (!isEqualsPressed) { + latestRightOperand = Double.parseDouble(screen); + isEqualsPressed = true; + } else { + latestValue = Double.parseDouble(screen); + } + 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 "+" -> latestValue + latestRightOperand; + case "-" -> latestValue - latestRightOperand; + case "x" -> latestValue * latestRightOperand; + case "/" -> latestValue / latestRightOperand; default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); @@ -130,4 +145,4 @@ 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); } -} +} \ No newline at end of file