From 5df38507304b2af8330a7246aaea7235015c43a5 Mon Sep 17 00:00:00 2001 From: sinem Date: Mon, 28 Oct 2024 18:08:16 +0100 Subject: [PATCH 01/13] Initial Commit --- build.gradle | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 build.gradle diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..e69de29 From bffa8433805573eb0baff2405a56b1ec49ed03cc Mon Sep 17 00:00:00 2001 From: sinem Date: Sat, 2 Nov 2024 19:02:17 +0100 Subject: [PATCH 02/13] Initial Commit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 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 ddff0da..0a4fdf9 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @DisplayName("Retro calculator") -class CalculatorTest { +public class CalculatorTest { @Test @DisplayName("should display result after adding two positive multi-digit numbers") @@ -90,5 +90,24 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen + @Test + @DisplayName("should display result after subtracing a smaller number from a large one") + void testPositiveSubraction() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(2); + calc.pressEqualsKey(); + + String expected = "3"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + public void main() { + testPositiveSubraction(); + } } From dcec31d2ea807c4c71501c8ac00693c006c86427 Mon Sep 17 00:00:00 2001 From: sinem Date: Sat, 2 Nov 2024 19:04:05 +0100 Subject: [PATCH 03/13] =?UTF-8?q?1.=20Commit=20f=C3=BCr=20neuer=20gr=C3=BC?= =?UTF-8?q?ner=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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 0a4fdf9..6ea80f6 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -106,8 +106,6 @@ void testPositiveSubraction() { assertEquals(expected, actual); } - public void main() { - testPositiveSubraction(); - } + } From c9854d8b0a83995955c05ce8b01eefd943564e43 Mon Sep 17 00:00:00 2001 From: sinem Date: Sat, 2 Nov 2024 19:07:44 +0100 Subject: [PATCH 04/13] =?UTF-8?q?1.=20Commit=20f=C3=BCr=20neuer=20gr=C3=BC?= =?UTF-8?q?ner=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 6ea80f6..6e0884d 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -106,6 +106,6 @@ void testPositiveSubraction() { assertEquals(expected, actual); } - + } From bfb45543885e242c1bdc63c524eb2b59808536ba Mon Sep 17 00:00:00 2001 From: sinem Date: Sat, 2 Nov 2024 19:09:07 +0100 Subject: [PATCH 05/13] =?UTF-8?q?1.=20Commit=20f=C3=BCr=20neuer=20gr=C3=BC?= =?UTF-8?q?ner=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java | 1 - 1 file changed, 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 6e0884d..dc7cca4 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -106,6 +106,5 @@ void testPositiveSubraction() { assertEquals(expected, actual); } - } From ef3f60d2e46dfb4c215786122cc1db2dabc6a85e Mon Sep 17 00:00:00 2001 From: sinem Date: Sat, 2 Nov 2024 21:54:16 +0100 Subject: [PATCH 06/13] =?UTF-8?q?2.=20Commit=20f=C3=BCr=20neuer=20roter=20?= =?UTF-8?q?Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 18 ++++++++++++++++++ 1 file changed, 18 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 dc7cca4..4b5fa57 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -105,6 +105,24 @@ void testPositiveSubraction() { assertEquals(expected, actual); } + @Test + @DisplayName("should display zero when multiplying any number by zero") + void testMultiplicationWithZero() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("*"); + calc.pressDigitKey(0); + calc.pressEqualsKey(); + + String expected = "0"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + + } + + } From b5dc7f26971c0fd5fb98e903e4fbe43794e62dad Mon Sep 17 00:00:00 2001 From: sinem Date: Sat, 2 Nov 2024 21:59:12 +0100 Subject: [PATCH 07/13] =?UTF-8?q?3.=20Commit=20f=C3=BCr=201.=20Bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 4b5fa57..b0b20aa 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -121,7 +121,7 @@ void testMultiplicationWithZero() { assertEquals(expected, actual); } - + } From 9ecf21996d180162e97ba7efc495b3617bfc2e9f Mon Sep 17 00:00:00 2001 From: sinem Date: Sun, 3 Nov 2024 19:37:10 +0100 Subject: [PATCH 08/13] =?UTF-8?q?4.=20Commit=20f=C3=BCr=20roten=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 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 b0b20aa..9b86e56 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -121,7 +121,22 @@ void testMultiplicationWithZero() { assertEquals(expected, actual); } - + @Test + @DisplayName("should display error when drawing the square root of a negative number") + void testSquareRootOfNegative() { + Calculator calc = new Calculator(); + + + calc.pressDigitKey(7); + calc.pressNegativeKey(); + calc.pressUnaryOperationKey("√"); + + String expected = "Error"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + } From 1ee5658b27916f7d389f04dc19dbd570aef772d4 Mon Sep 17 00:00:00 2001 From: sinem Date: Sun, 3 Nov 2024 19:45:19 +0100 Subject: [PATCH 09/13] =?UTF-8?q?4.=20Commit=20f=C3=BCr=20roten=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 9b86e56..3431009 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -113,7 +113,7 @@ void testMultiplicationWithZero() { calc.pressDigitKey(5); calc.pressBinaryOperationKey("*"); calc.pressDigitKey(0); - calc.pressEqualsKey(); + calc.pressDotKey(); String expected = "0"; String actual = calc.readScreen(); From 679a45c5c2acf67ba3ebca62bf723bd0efaae1f2 Mon Sep 17 00:00:00 2001 From: sinem Date: Tue, 12 Nov 2024 14:51:29 +0100 Subject: [PATCH 10/13] =?UTF-8?q?Commit=20f=C3=BCr=20ersten=20roten=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) 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 3431009..f1c9f2b 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -1,12 +1,14 @@ package htw.berlin.prog2.ha1; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +@Nested @DisplayName("Retro calculator") -public class CalculatorTest { +class CalculatorTest { @Test @DisplayName("should display result after adding two positive multi-digit numbers") @@ -56,7 +58,7 @@ void testDivisionByZero() { assertEquals(expected, actual); } - @Test + @Test @DisplayName("should display error when drawing the square root of a negative number") void testSquareRootOfNegative() { Calculator calc = new Calculator(); @@ -68,7 +70,7 @@ void testSquareRootOfNegative() { String expected = "Error"; String actual = calc.readScreen(); - assertEquals(expected, actual); + assertEquals(expected, actual) ; } @Test @@ -90,6 +92,7 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen + //grüner Test @Test @DisplayName("should display result after subtracing a smaller number from a large one") void testPositiveSubraction() { @@ -105,39 +108,29 @@ void testPositiveSubraction() { assertEquals(expected, actual); } + + @Test - @DisplayName("should display zero when multiplying any number by zero") - void testMultiplicationWithZero() { + @DisplayName("should display error when inverting zero") + void testInversionOfZero() { Calculator calc = new Calculator(); - calc.pressDigitKey(5); - calc.pressBinaryOperationKey("*"); calc.pressDigitKey(0); - calc.pressDotKey(); + calc.pressUnaryOperationKey("1/x"); - String expected = "0"; + String expected = "Error"; String actual = calc.readScreen(); assertEquals(expected, actual); } - @Test - @DisplayName("should display error when drawing the square root of a negative number") - void testSquareRootOfNegative() { - Calculator calc = new Calculator(); - calc.pressDigitKey(7); - calc.pressNegativeKey(); - calc.pressUnaryOperationKey("√"); +} + - String expected = "Error"; - String actual = calc.readScreen(); - assertEquals(expected, actual); - } -} From 7859715cf6042a681c62eb4ff0a65f925c40bcfd Mon Sep 17 00:00:00 2001 From: sinem Date: Tue, 12 Nov 2024 15:00:45 +0100 Subject: [PATCH 11/13] =?UTF-8?q?Bugfix=20f=C3=BCr=20ersten=20roten=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 68 ++++++++++++------- 1 file changed, 45 insertions(+), 23 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..0972232 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -8,16 +8,17 @@ */ public class Calculator { - private String screen = "0"; + private String screen = "0"; // aktueller Bildschirminhalt - private double latestValue; + private double latestValue; //zuletzt eingegebener Wert - private String latestOperation = ""; + private String latestOperation = ""; // letzte Operation /** * @return den aktuellen Bildschirminhalt als String */ public String readScreen() { + return screen; } @@ -26,14 +27,17 @@ public String readScreen() { * drücken kann muss der Wert positiv und einstellig sein und zwischen 0 und 9 liegen. * 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 (digit > 9 || digit < 0) throw new IllegalArgumentException(); //Prüfen auf ungültige Ziffer + // Bildschirm zurücksetzten, wenn "0" oder zuletzt eingegebener Wert dem aktuellen Wert entspricht + if (screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + - if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + screen = screen + digit;// Ziffer an Bildschirm anhängen - screen = screen + digit; } /** @@ -45,9 +49,9 @@ public void pressDigitKey(int digit) { * im Ursprungszustand ist. */ public void pressClearKey() { - screen = "0"; - latestOperation = ""; - latestValue = 0.0; + screen = "0"; //Bildschirm auf "0" setzen + latestOperation = ""; // letzte Operation zurücksetzen + latestValue = 0.0; //zuletzt eingegebenen Wert zurücksetzen } /** @@ -57,11 +61,13 @@ public void pressClearKey() { * Rechner in den passenden Operationsmodus versetzt. * Beim zweiten Drücken nach Eingabe einer weiteren Zahl wird direkt des aktuelle Zwischenergebnis * auf dem Bildschirm angezeigt. Falls hierbei eine Division durch Null auftritt, wird "Error" angezeigt. + * * @param operation "+" für Addition, "-" für Substraktion, "x" für Multiplikation, "/" für Division */ - public void pressBinaryOperationKey(String operation) { - latestValue = Double.parseDouble(screen); - latestOperation = operation; + public void pressBinaryOperationKey(String operation) { // M. empfängt als Wert ein String + latestValue = Double.parseDouble(screen); // aktueller Wert auf Bildschirm wird als double konvertiert und in lV gespeichert + latestOperation = operation; // ausgewählte Operation wird in der Variable gespeichert + } /** @@ -69,23 +75,33 @@ public void pressBinaryOperationKey(String operation) { * Quadratwurzel, Prozent, Inversion, welche nur einen Operanden benötigen. * Beim Drücken der Taste wird direkt die Operation auf den aktuellen Zahlenwert angewendet und * der Bildschirminhalt mit dem Ergebnis aktualisiert. + * * @param operation "√" für Quadratwurzel, "%" für Prozent, "1/x" für Inversion */ public void pressUnaryOperationKey(String operation) { - latestValue = Double.parseDouble(screen); - latestOperation = operation; - var result = switch(operation) { - case "√" -> Math.sqrt(Double.parseDouble(screen)); + latestValue = Double.parseDouble(screen); // Aktuellen Wert speichern + latestOperation = operation; // Setze die Operation + + if (operation.equals("1/x") && latestValue == 0) { + screen = "Error"; + return; + } + + var result = switch (operation) { // Berechnung durchführen + case "√" -> Math.sqrt(Double.parseDouble(screen)); // Quadratwurzel case "%" -> Double.parseDouble(screen) / 100; - case "1/x" -> 1 / Double.parseDouble(screen); - default -> throw new IllegalArgumentException(); + case "1/x" -> 1 / Double.parseDouble(screen); // Inversion + default -> throw new IllegalArgumentException(); // Ungültige Operation }; - screen = Double.toString(result); - if(screen.equals("NaN")) screen = "Error"; - if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + screen = Double.toString(result); // Ergebnis in Zeichenkette umgewandelt und auf dem Bildschirm anzeigen + if (screen.equals("NaN")) screen = "Error"; // Fehler anzeigen, wenn ungültige Berechnung + if (screen.contains(".") && screen.length() > 11) + screen = screen.substring(0, 10); // Bildschirmformatierung, wenn Ergebnis eine Dezimalzahl und screen länger als 11 Zeichen hat + // String auf max 10 Zeichen gekürzt } + /** * 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 @@ -93,8 +109,9 @@ public void pressUnaryOperationKey(String operation) { * Trennzeichen angegeben und daher als Dezimalziffern interpretiert. * Beim zweimaligem Drücken, oder wenn bereits ein Trennzeichen angezeigt wird, passiert nichts. */ + public void pressDotKey() { - if(!screen.contains(".")) screen = screen + "."; + if (!screen.contains(".")) screen = screen + "."; } /** @@ -106,7 +123,7 @@ public void pressDotKey() { */ public void pressNegativeKey() { screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; - } + } // M. prüft ob Minuszeichen vorhanden /** * Empfängt den Befehl der gedrückten "="-Taste. @@ -118,6 +135,7 @@ 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); @@ -131,3 +149,7 @@ public void pressEqualsKey() { if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); } } + + + + From 49785ae44997101112fec862b9cf1c9574c9f59e Mon Sep 17 00:00:00 2001 From: sinem Date: Tue, 12 Nov 2024 15:11:04 +0100 Subject: [PATCH 12/13] =?UTF-8?q?Commit=20f=C3=BCr=20zweiten=20roten=20Tes?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 23 +++++++++++++++++++ 1 file changed, 23 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 f1c9f2b..bab2314 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -1,5 +1,6 @@ package htw.berlin.prog2.ha1; +import com.google.common.cache.CacheLoader; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -125,6 +126,28 @@ void testInversionOfZero() { } + @Test + @DisplayName("should not allow to display ") + void testTooManyDigits() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(1); + calc.pressDigitKey(2); + calc.pressDigitKey(3); + calc.pressDigitKey(4); + calc.pressDigitKey(5); + calc.pressDigitKey(6); + calc.pressDigitKey(7); + calc.pressDigitKey(8); + calc.pressDigitKey(9); + calc.pressDigitKey(0); + calc.pressDigitKey(1); + + String expected = "1234567890"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } } From 2a04fc1af1108b4d88779ffe0becf34e5f0b3c60 Mon Sep 17 00:00:00 2001 From: sinem Date: Tue, 12 Nov 2024 15:14:40 +0100 Subject: [PATCH 13/13] =?UTF-8?q?Bugfix=20f=C3=BCr=20zweiten=20roten=20Tes?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 3 +++ 1 file changed, 3 insertions(+) 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 0972232..11251dc 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -38,6 +38,9 @@ public void pressDigitKey(int digit) { screen = screen + digit;// Ziffer an Bildschirm anhängen + if(screen.length() > 10) { + screen = screen.substring(0,10); + } } /**