From 69062018673e1c67df6efe36f9874e5af97ebec7 Mon Sep 17 00:00:00 2001 From: DavidJulianK Date: Wed, 9 Apr 2025 21:42:10 +0200 Subject: [PATCH 1/4] Anmerkungen und erster positiver Test --- .../main/java/htw/berlin/prog2/ha1/Calculator.java | 14 +++++++------- .../java/htw/berlin/prog2/ha1/CalculatorTest.java | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) 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..50a3c752 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -31,7 +31,7 @@ public String readScreen() { public void pressDigitKey(int digit) { if(digit > 9 || digit < 0) throw new IllegalArgumentException(); - if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; //die OR Verknüpfung erfüllt keinen Zweck, wieso sollte der Screen geleert werden, wenn der latestValue identisch zum digit ist? screen = screen + digit; } @@ -46,7 +46,7 @@ public void pressDigitKey(int digit) { */ public void pressClearKey() { screen = "0"; - latestOperation = ""; + latestOperation = ""; //Die CE Eingabe wird nicht beachtet. Es werden in jedem Fall alle bisher getätigten Eingaben gelöscht. latestValue = 0.0; } @@ -77,7 +77,7 @@ public void pressUnaryOperationKey(String operation) { var result = switch(operation) { case "√" -> Math.sqrt(Double.parseDouble(screen)); case "%" -> Double.parseDouble(screen) / 100; - case "1/x" -> 1 / Double.parseDouble(screen); + case "1/x" -> 1 / Double.parseDouble(screen); //1 / 0 ergibt infinity, wird hier nicht behandelt default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); @@ -105,7 +105,7 @@ public void pressDotKey() { * entfernt und der Inhalt fortan als positiv interpretiert. */ public void pressNegativeKey() { - screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; + screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; //so in Ordnung } /** @@ -122,12 +122,12 @@ public void pressEqualsKey() { case "+" -> latestValue + Double.parseDouble(screen); case "-" -> latestValue - Double.parseDouble(screen); case "x" -> latestValue * Double.parseDouble(screen); - case "/" -> latestValue / Double.parseDouble(screen); + case "/" -> latestValue / Double.parseDouble(screen); //Analog zu oben; latestValue / 0 führt zu einem Fehler default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); - if(screen.equals("Infinity")) screen = "Error"; + if(screen.equals("Infinity")) screen = "Error"; //In keinem Ergebnis kann "Infinity" im String stehen if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); - if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); //Die Gesamtlänge der Zahl wird hier auf 10 Stellen Begrenzt. Soll eigentlich mit "e" und der Potenz Arbeiten. } } 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..d17dbc29 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -88,6 +88,20 @@ void testMultipleDecimalDots() { assertEquals(expected, actual); } + @Test + @DisplayName("Ersetzt auf dem Display die 0, wenn eine Zahl zwischen 1 und 9 nachfolgend gedrückt wird") + void testPressDigitKey(){ + Calculator calc = new Calculator(); + + calc.pressDigitKey(0); + calc.pressDigitKey(5); + + String expected = "5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + //TODO hier weitere Tests erstellen } From 3e2f98ca7803983203e793f617c626d95205f6e5 Mon Sep 17 00:00:00 2001 From: DavidJulianK Date: Wed, 9 Apr 2025 22:33:32 +0200 Subject: [PATCH 2/4] =?UTF-8?q?zwei=20negative=20Tests=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) 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 d17dbc29..0bd01430 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -102,7 +102,35 @@ void testPressDigitKey(){ assertEquals(expected, actual); } + @Test + @DisplayName("Anfügen mehrerer gleicher aufeinanderfolgender Zahlen") + void testPressDigitKeyWholeNumber(){ + Calculator calc = new Calculator(); + + calc.pressDigitKey(3); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(3); + calc.pressDigitKey(4); + + String expected = "34"; + String actual = calc.readScreen(); + assertEquals(expected, actual); + } + + @Test + @DisplayName("1/X wirft bei screen = 0 einen Error") + void testPressClearKey(){ + Calculator calc = new Calculator(); + + calc.pressDigitKey(0); + calc.pressUnaryOperationKey("1/x"); + + String expected = "Error"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } //TODO hier weitere Tests erstellen } From 0475d3137c25f86f00ec0ce4ff9edc30deb72743 Mon Sep 17 00:00:00 2001 From: DavidJulianK Date: Wed, 9 Apr 2025 23:00:20 +0200 Subject: [PATCH 3/4] Korrektur vom Test testPressDigitKeyWholeNumber --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 50a3c752..3d2f3dbe 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -14,6 +14,8 @@ public class Calculator { private String latestOperation = ""; + private boolean isNewInput = false; + /** * @return den aktuellen Bildschirminhalt als String */ @@ -31,8 +33,10 @@ public String readScreen() { public void pressDigitKey(int digit) { if(digit > 9 || digit < 0) throw new IllegalArgumentException(); - if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; //die OR Verknüpfung erfüllt keinen Zweck, wieso sollte der Screen geleert werden, wenn der latestValue identisch zum digit ist? - + if(screen.equals("0") || screen.equals("Error") || isNewInput) { + screen = ""; + isNewInput = false; + } screen = screen + digit; } @@ -62,6 +66,7 @@ public void pressClearKey() { public void pressBinaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; + isNewInput = true; } /** From 18b9f9f9a5d16d1a704ec8a92385fd3069c246c9 Mon Sep 17 00:00:00 2001 From: DavidJulianK Date: Wed, 9 Apr 2025 23:04:23 +0200 Subject: [PATCH 4/4] Korrektur vom Test testDivideOneByZero --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 1 + app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) 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 3d2f3dbe..203788b7 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -87,6 +87,7 @@ public void pressUnaryOperationKey(String operation) { }; screen = Double.toString(result); if(screen.equals("NaN")) screen = "Error"; + if(screen.equals("Infinity")) screen = "Error"; if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); } 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 0bd01430..eca01171 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -120,7 +120,7 @@ void testPressDigitKeyWholeNumber(){ @Test @DisplayName("1/X wirft bei screen = 0 einen Error") - void testPressClearKey(){ + void testDivideOneByZero(){ Calculator calc = new Calculator(); calc.pressDigitKey(0);