From ae372bd6aa9e084392f21486c9eba7d75da76a76 Mon Sep 17 00:00:00 2001 From: Deniz Date: Sun, 3 Nov 2024 20:21:27 +0100 Subject: [PATCH 1/8] =?UTF-8?q?1.=20Commit=20f=C3=BCr=20neuer=20gr=C3=BCne?= =?UTF-8?q?r=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 19 +++++++++++++++++++ 1 file changed, 19 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 ddff0da..38e2118 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -90,5 +90,24 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen + //Gibt das Ergebnis einer Subrtraktion aus + @Test + @DisplayName("should display result after substracting two negative numbers") + void testNegativeSubstracting() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressNegativeKey(); + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(6); + calc.pressNegativeKey(); + calc.pressEqualsKey(); + + String expected = "1"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + } From 18f2566b0654d7ee60c22e31322597a1fd012ab9 Mon Sep 17 00:00:00 2001 From: Deniz Date: Sun, 3 Nov 2024 20:37:19 +0100 Subject: [PATCH 2/8] =?UTF-8?q?=202.=20Commit=20f=C3=BCr=20neuer=20roter?= =?UTF-8?q?=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/CalculatorTest.java | 14 ++++++++++++++ 1 file changed, 14 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 38e2118..b6b6992 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -108,6 +108,20 @@ void testNegativeSubstracting() { assertEquals(expected, actual); } + @Test + @DisplayName("should display a negative number") + void testNegativeDigit() { + Calculator calc = new Calculator(); + + calc.pressNegativeKey(); + calc.pressDigitKey(5); + + String expected = "-5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + } From 0686e4815e96e4934af3b5f47adf3cfafd502ebc Mon Sep 17 00:00:00 2001 From: Deniz Date: Sun, 3 Nov 2024 20:41:40 +0100 Subject: [PATCH 3/8] =?UTF-8?q?3.=20Commit=20f=C3=BCr=20den=20Fix=20zu=20d?= =?UTF-8?q?iesem=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 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 84c04f2..caab06a 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,4 @@ 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) @@ -7,20 +6,22 @@ * Enthält mit Absicht noch diverse Bugs oder unvollständige Funktionen. */ public class Calculator { - private String screen = "0"; - private double latestValue; private String latestOperation = ""; + private int count = 0; + + private boolean isNegative = false; + + /** * @return den aktuellen Bildschirminhalt als String */ public String readScreen() { return screen; } - /** * 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. @@ -29,10 +30,14 @@ public String readScreen() { * @param digit Die Ziffer, deren Taste gedrückt wurde */ public void pressDigitKey(int digit) { + count = count + 1; + if(digit > 9 || digit < 0) throw new IllegalArgumentException(); if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if(isNegative) screen = "-"; + screen = screen + digit; } @@ -45,11 +50,11 @@ public void pressDigitKey(int digit) { * im Ursprungszustand ist. */ public void pressClearKey() { + count = 0; screen = "0"; latestOperation = ""; latestValue = 0.0; } - /** * Empfängt den Wert einer gedrückten binären Operationstaste, also eine der vier Operationen * Addition, Substraktion, Division, oder Multiplikation, welche zwei Operanden benötigen. @@ -63,7 +68,6 @@ public void pressBinaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; } - /** * Empfängt den Wert einer gedrückten unären Operationstaste, also eine der drei Operationen * Quadratwurzel, Prozent, Inversion, welche nur einen Operanden benötigen. @@ -83,9 +87,7 @@ public void pressUnaryOperationKey(String operation) { screen = Double.toString(result); if(screen.equals("NaN")) screen = "Error"; if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); - } - /** * Empfängt den Befehl der gedrückten Dezimaltrennzeichentaste, im Englischen üblicherweise "." * Fügt beim ersten Mal Drücken dem aktuellen Bildschirminhalt das Trennzeichen auf der rechten @@ -96,7 +98,6 @@ public void pressUnaryOperationKey(String operation) { public void pressDotKey() { if(!screen.contains(".")) screen = screen + "."; } - /** * Empfängt den Befehl der gedrückten Vorzeichenumkehrstaste ("+/-"). * Zeigt der Bildschirm einen positiven Wert an, so wird ein "-" links angehängt, der Bildschirm @@ -105,6 +106,9 @@ public void pressDotKey() { * entfernt und der Inhalt fortan als positiv interpretiert. */ public void pressNegativeKey() { + count = count + 1; + + if(count == 1)isNegative = true; screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; } @@ -118,6 +122,7 @@ public void pressNegativeKey() { * und das Ergebnis direkt angezeigt. */ public void pressEqualsKey() { + count = 0; var result = switch(latestOperation) { case "+" -> latestValue + Double.parseDouble(screen); case "-" -> latestValue - Double.parseDouble(screen); @@ -130,4 +135,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 From 836bc01dc012b9a3530c9b99f8555315cf651f0d Mon Sep 17 00:00:00 2001 From: Deniz Date: Sun, 3 Nov 2024 20:42:55 +0100 Subject: [PATCH 4/8] =?UTF-8?q?4.=20Commit=20f=C3=BCr=20weiteren=20neuen?= =?UTF-8?q?=20roter=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 22 +++++++++++++++++++ 1 file changed, 22 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 b6b6992..03b0aea 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -121,6 +121,28 @@ void testNegativeDigit() { assertEquals(expected, actual); } + @Test + @DisplayName("should display result after adding two positive multi-digit numbers and pressing equal sign again") + void testMultiplePositiveAddition() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(2); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(3); + calc.pressEqualsKey(); + + String expected1 = "5"; + String actual1 = calc.readScreen(); + + assertEquals(expected1, actual1); + + calc.pressEqualsKey(); + + String expected2 = "8"; + String actual2 = calc.readScreen(); + + assertEquals(expected2, actual2); + } } From f4e128bb4e55031c2ea5992dc91059bd6b42b4ad Mon Sep 17 00:00:00 2001 From: Deniz Date: Sun, 3 Nov 2024 20:46:41 +0100 Subject: [PATCH 5/8] =?UTF-8?q?5.=20Commit=20f=C3=BCr=20Fix=20zu=20diesem?= =?UTF-8?q?=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 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 caab06a..641fb65 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -120,17 +120,28 @@ public void pressNegativeKey() { * Wird die Taste weitere Male gedrückt (ohne andere Tasten dazwischen), so wird die letzte * Operation (ggf. inklusive letztem Operand) erneut auf den aktuellen Bildschirminhalt angewandt * und das Ergebnis direkt angezeigt. + * * Der letzte Operand (`lastOperand`) wird gespeichert, sobald "=" zum ersten Mal nach + * * einer Operation gedrückt wird. Dieser Operand wird bei weiterer Addition-Berechnung verwendet. + * * `latestValue` speichert das letzte Berechnungsergebnis, damit die Wiederholung der + * * letzten Operation mit dem `lastOperand` möglich ist. */ + private Double lastOperand = null; public void pressEqualsKey() { - count = 0; - var result = switch(latestOperation) { - case "+" -> latestValue + Double.parseDouble(screen); + double currentScreenValue = Double.parseDouble(screen); + if (latestOperation.isEmpty()) return; + if (lastOperand == null) { + lastOperand = currentScreenValue; + } + + double result = switch(latestOperation) { + case "+" -> latestValue + lastOperand; case "-" -> latestValue - Double.parseDouble(screen); case "x" -> latestValue * Double.parseDouble(screen); case "/" -> latestValue / Double.parseDouble(screen); default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); + latestValue = 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); From 8e7820629cbb2b1eca34cbc45fab54d94b813511 Mon Sep 17 00:00:00 2001 From: Deniz Date: Sun, 20 Apr 2025 19:50:03 +0200 Subject: [PATCH 6/8] 4. Commit roter Test --- app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 03b0aea..c7b9804 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -90,7 +90,7 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen - //Gibt das Ergebnis einer Subrtraktion aus + //Gibt das Ergebnis einer Subrtraktion zweier negativer Nummern aus @Test @DisplayName("should display result after substracting two negative numbers") void testNegativeSubstracting() { From a741c37cc1e88ca0480b13fd060979ef1beb31e6 Mon Sep 17 00:00:00 2001 From: Deniz Date: Sun, 20 Apr 2025 19:50:30 +0200 Subject: [PATCH 7/8] 5. Commit Fix --- app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java | 1 + 1 file changed, 1 insertion(+) 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 c7b9804..cf3bab9 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -121,6 +121,7 @@ void testNegativeDigit() { assertEquals(expected, actual); } + //finish @Test @DisplayName("should display result after adding two positive multi-digit numbers and pressing equal sign again") void testMultiplePositiveAddition() { From d165d1d892770917be15a331d66de51fef2603d1 Mon Sep 17 00:00:00 2001 From: Deniz Date: Sun, 20 Apr 2025 19:54:03 +0200 Subject: [PATCH 8/8] 5. Commit Fix --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 1 + 1 file changed, 1 insertion(+) 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 641fb65..ee4188e 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -1,4 +1,5 @@ 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)