From 9717015e271081a4b0d06bb2cc8b16c70b09df06 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 16:07:53 +0100 Subject: [PATCH 01/17] TEST --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 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 84c04f2..6cb8bec 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -128,6 +128,6 @@ public void pressEqualsKey() { 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(screen.contains(".") && screen.length() > 11) screen = screen.substring(1, 10); } } From b0a98ddc1df5c9a495192121439301952f31f51a Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 17:29:45 +0100 Subject: [PATCH 02/17] TEST --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 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 6cb8bec..84c04f2 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -128,6 +128,6 @@ public void pressEqualsKey() { 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(1, 10); + if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); } } From 2181fc969abcb9b070e9f1ea13b0f7913b87f77b Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 17:31:18 +0100 Subject: [PATCH 03/17] TEST --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 3 ++- 1 file 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 84c04f2..f526d49 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -128,6 +128,7 @@ public void pressEqualsKey() { 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(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10) } } +//hello world 2 \ No newline at end of file From ce5ee0f55938ca47baa5489e62b5142de7140955 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 18:07:52 +0100 Subject: [PATCH 04/17] TEST --- .../java/htw/berlin/prog2/ha1/Calculator.java | 268 +++++++++--------- .../htw/berlin/prog2/ha1/CalculatorTest.java | 1 + 2 files changed, 135 insertions(+), 134 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 f526d49..64c2e85 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -1,134 +1,134 @@ -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) - * und dessen Bildschirm bis zu zehn Ziffern plus einem Dezimaltrennzeichen darstellen kann. - * Enthält mit Absicht noch diverse Bugs oder unvollständige Funktionen. - */ -public class Calculator { - - private String screen = "0"; - - private double latestValue; - - private String latestOperation = ""; - - /** - * @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. - * 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; - } - - /** - * Empfängt den Befehl der C- bzw. CE-Taste (Clear bzw. Clear Entry). - * Einmaliges Drücken der Taste löscht die zuvor eingegebenen Ziffern auf dem Bildschirm - * so dass "0" angezeigt wird, jedoch ohne zuvor zwischengespeicherte Werte zu löschen. - * Wird daraufhin noch einmal die Taste gedrückt, dann werden auch zwischengespeicherte - * Werte sowie der aktuelle Operationsmodus zurückgesetzt, so dass der Rechner wieder - * im Ursprungszustand ist. - */ - public void pressClearKey() { - 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. - * Beim ersten Drücken der Taste wird der Bildschirminhalt nicht verändert, sondern nur der - * 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; - } - - /** - * Empfängt den Wert einer gedrückten unären Operationstaste, also eine der drei Operationen - * 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)); - case "%" -> Double.parseDouble(screen) / 100; - case "1/x" -> 1 / Double.parseDouble(screen); - default -> throw new IllegalArgumentException(); - }; - 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 - * Seite hinzu und aktualisiert den Bildschirm. Daraufhin eingegebene Zahlen werden rechts vom - * 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 + "."; - } - - /** - * Empfängt den Befehl der gedrückten Vorzeichenumkehrstaste ("+/-"). - * Zeigt der Bildschirm einen positiven Wert an, so wird ein "-" links angehängt, der Bildschirm - * aktualisiert und die Inhalt fortan als negativ interpretiert. - * Zeigt der Bildschirm bereits einen negativen Wert mit führendem Minus an, dann wird dieses - * entfernt und der Inhalt fortan als positiv interpretiert. - */ - public void pressNegativeKey() { - screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; - } - - /** - * Empfängt den Befehl der gedrückten "="-Taste. - * Wurde zuvor keine Operationstaste gedrückt, passiert nichts. - * 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 - * Operation (ggf. inklusive letztem Operand) erneut auf den aktuellen Bildschirminhalt angewandt - * 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) - } -} -//hello world 2 \ No newline at end of file +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) + * und dessen Bildschirm bis zu zehn Ziffern plus einem Dezimaltrennzeichen darstellen kann. + * Enthält mit Absicht noch diverse Bugs oder unvollständige Funktionen. + */ +public class Calculator { + + private String screen = "0"; + + private double latestValue; + + private String latestOperation = ""; + + /** + * @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. + * 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; + } + + /** + * Empfängt den Befehl der C- bzw. CE-Taste (Clear bzw. Clear Entry). + * Einmaliges Drücken der Taste löscht die zuvor eingegebenen Ziffern auf dem Bildschirm + * so dass "0" angezeigt wird, jedoch ohne zuvor zwischengespeicherte Werte zu löschen. + * Wird daraufhin noch einmal die Taste gedrückt, dann werden auch zwischengespeicherte + * Werte sowie der aktuelle Operationsmodus zurückgesetzt, so dass der Rechner wieder + * im Ursprungszustand ist. + */ + public void pressClearKey() { + 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. + * Beim ersten Drücken der Taste wird der Bildschirminhalt nicht verändert, sondern nur der + * 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; + } + + /** + * Empfängt den Wert einer gedrückten unären Operationstaste, also eine der drei Operationen + * 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)); + case "%" -> Double.parseDouble(screen) / 100; + case "1/x" -> 1 / Double.parseDouble(screen); + default -> throw new IllegalArgumentException(); + }; + 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 + * Seite hinzu und aktualisiert den Bildschirm. Daraufhin eingegebene Zahlen werden rechts vom + * 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 + "."; + } + + /** + * Empfängt den Befehl der gedrückten Vorzeichenumkehrstaste ("+/-"). + * Zeigt der Bildschirm einen positiven Wert an, so wird ein "-" links angehängt, der Bildschirm + * aktualisiert und die Inhalt fortan als negativ interpretiert. + * Zeigt der Bildschirm bereits einen negativen Wert mit führendem Minus an, dann wird dieses + * entfernt und der Inhalt fortan als positiv interpretiert. + */ + public void pressNegativeKey() { + screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; + } + + /** + * Empfängt den Befehl der gedrückten "="-Taste. + * Wurde zuvor keine Operationstaste gedrückt, passiert nichts. + * 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 + * Operation (ggf. inklusive letztem Operand) erneut auf den aktuellen Bildschirminhalt angewandt + * 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.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 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..1840957 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,6 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen + } From ae92dc4fb64e28e2c97b94cf5bdf30d3388eefa1 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 18:20:11 +0100 Subject: [PATCH 05/17] commit 1 --- .../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 1840957..7da7445 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -90,6 +90,20 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen + @Test + @DisplayName("soll den Bildschirm auf 0 zurücksetzen, wenn die Clear-Taste = 0 gedrückt wird") + void testClearScreen() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(1);//1 eingeben + calc.pressDigitKey(6);//6 eingeben und dann clear taste drücken + calc.pressClearKey();// clear taste drücken + + String expected = "0";// ergebnis ist 0 + String actual = calc.readScreen(); //commit 1 + + assertEquals(expected, actual); + } } From 3d3b3d39b1b1c022e1c85d9aa29f59b7bbe059cf Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 18:20:55 +0100 Subject: [PATCH 06/17] commit 1 --- 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 7da7445..6ef2386 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -100,7 +100,7 @@ void testClearScreen() { calc.pressClearKey();// clear taste drücken String expected = "0";// ergebnis ist 0 - String actual = calc.readScreen(); //commit 1 + String actual = calc.readScreen(); //commit 1 - assertEquals(expected, actual); } From 64035b288d16ec90a093a3581a4672dbaab5d01b Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 18:50:55 +0100 Subject: [PATCH 07/17] commit 1 --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 16 ++++++++++++++++ 1 file changed, 16 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 6ef2386..ff1aa5c 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -104,6 +104,22 @@ void testClearScreen() { assertEquals(expected, actual); } + @Test + @DisplayName("soll 'Error' anzeigen, wenn ein negativer Wert durch Null geteilt wird") + void testNegativeDivisionByZero() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5);// 5 eingeben + calc.pressNegativeKey(); // 5- eingeben + calc.pressBinaryOperationKey("/");// geteilt + calc.pressDigitKey(0); // geteilt 0 + calc.pressEqualsKey(); // ergebnis berechnen + + String expected = "Error"; //zeigt error an + String actual = calc.readScreen(); //commit 2 + + assertEquals(expected, actual); + } } From aa9cd6c82152e1778850506fdd6779b6530758a5 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 21:16:00 +0100 Subject: [PATCH 08/17] commit 2 - 1/2 --- 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 ff1aa5c..4484d68 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -116,7 +116,7 @@ void testNegativeDivisionByZero() { calc.pressEqualsKey(); // ergebnis berechnen String expected = "Error"; //zeigt error an - String actual = calc.readScreen(); //commit 2 + String actual = calc.readScreen(); //commit 2 - 1/2 assertEquals(expected, actual); } From 8a442d0a542c8064efcb23d9aa7872862290704b Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 21:17:03 +0100 Subject: [PATCH 09/17] commit 2 - 1/2 --- 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 4484d68..aa41cf9 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -116,7 +116,7 @@ void testNegativeDivisionByZero() { calc.pressEqualsKey(); // ergebnis berechnen String expected = "Error"; //zeigt error an - String actual = calc.readScreen(); //commit 2 - 1/2 + String actual = calc.readScreen(); //commit 2 - 1/2 - assertEquals(expected, actual); } From 920fae4b2f4cbd7ba727d8269995a9c793571477 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 21:18:23 +0100 Subject: [PATCH 10/17] commit 2 - 1/2, --- 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 aa41cf9..32a484f 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -116,7 +116,7 @@ void testNegativeDivisionByZero() { calc.pressEqualsKey(); // ergebnis berechnen String expected = "Error"; //zeigt error an - String actual = calc.readScreen(); //commit 2 - 1/2 - + String actual = calc.readScreen(); //commit 2 - 1/2 -- assertEquals(expected, actual); } From ce793e8e3ec59892d3c4c60b7dbacd1441e183d5 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Thu, 31 Oct 2024 21:18:53 +0100 Subject: [PATCH 11/17] commit 2 - 1/2 push- --- 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 32a484f..aa41cf9 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -116,7 +116,7 @@ void testNegativeDivisionByZero() { calc.pressEqualsKey(); // ergebnis berechnen String expected = "Error"; //zeigt error an - String actual = calc.readScreen(); //commit 2 - 1/2 -- + String actual = calc.readScreen(); //commit 2 - 1/2 - assertEquals(expected, actual); } From fd6dafd7d47acb618dc4164b24b14b4476c6f8d6 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Sat, 2 Nov 2024 18:52:59 +0100 Subject: [PATCH 12/17] commit 2 - 2/2 --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 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 aa41cf9..83ca080 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -91,7 +91,7 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen @Test - @DisplayName("soll den Bildschirm auf 0 zurücksetzen, wenn die Clear-Taste = 0 gedrückt wird") + @DisplayName ("soll den Bildschirm auf 0 zurücksetzen, wenn die Clear-Taste = 0 gedrückt wird") void testClearScreen() { Calculator calc = new Calculator(); @@ -105,7 +105,7 @@ void testClearScreen() { assertEquals(expected, actual); } @Test - @DisplayName("soll 'Error' anzeigen, wenn ein negativer Wert durch Null geteilt wird") + @DisplayName ("soll 'Error' anzeigen, wenn ein negativer Wert durch Null geteilt wird") void testNegativeDivisionByZero() { Calculator calc = new Calculator(); @@ -120,6 +120,17 @@ void testNegativeDivisionByZero() { assertEquals(expected, actual); } + @Test + @DisplayName ("soll 'Error' anzeigen, wenn 1/x ohne Ausgangswert berechnet wird") + void testInverseWithoutValue() { + Calculator calc = new Calculator(); + + calc.pressUnaryOperationKey("1/x"); // 1/x taste drücken -} + String expected = "Error"; // zeigt error an + String actual = calc.readScreen(); //commit 2 - 2/2 + + assertEquals(expected, actual); + } +} \ No newline at end of file From 8218cfc3a93bbe54b7c08db49a45a82698f61ca1 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Sat, 2 Nov 2024 18:53:39 +0100 Subject: [PATCH 13/17] commit 2 - 2/2- p --- 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 83ca080..32cb137 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -128,7 +128,7 @@ void testInverseWithoutValue() { calc.pressUnaryOperationKey("1/x"); // 1/x taste drücken String expected = "Error"; // zeigt error an - String actual = calc.readScreen(); //commit 2 - 2/2 + String actual = calc.readScreen(); //commit 2 - 2/2 p assertEquals(expected, actual); } From c650776cd8bdd8d90b5ff579bcd43e6e35614117 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Sun, 3 Nov 2024 23:00:44 +0100 Subject: [PATCH 14/17] =?UTF-8?q?commit=203=20-=20bug=20fixes=20etc.=20und?= =?UTF-8?q?=20weitere=20=C3=A4nderungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 75 ++++++++++++++----- .../htw/berlin/prog2/ha1/CalculatorTest.java | 15 ++-- 2 files changed, 64 insertions(+), 26 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 64c2e85..302f2a2 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -72,20 +72,35 @@ public void pressBinaryOperationKey(String operation) { * @param operation "√" für Quadratwurzel, "%" für Prozent, "1/x" für Inversion */ public void pressUnaryOperationKey(String operation) { + // Überprüfung: Bildschirmwertes null bevor ausgeführt (operation) wird + if (operation.equals("1/x") && screen.equals("0")) { + screen = "Error"; // Fehler bei Division durch null + return; // Methode verlassen + } + + // Übernehmen des aktuellen Wertes und der Ausführung latestValue = Double.parseDouble(screen); latestOperation = operation; - var result = switch(operation) { - case "√" -> Math.sqrt(Double.parseDouble(screen)); - case "%" -> Double.parseDouble(screen) / 100; - case "1/x" -> 1 / Double.parseDouble(screen); - default -> throw new IllegalArgumentException(); + + // die Durchführung der berechnungen + double result = switch (operation) { + case "√" -> Math.sqrt(latestValue); + case "%" -> latestValue / 100; + case "1/x" -> 1 / latestValue; + 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); + // Ergebnisses auf den Bildschirm setzen + screen = Double.toString(result); + if (screen.equals("NaN") || screen.equals("Infinity")) { + screen = "Error"; + } + if (screen.contains(".") && screen.length() > 11) { + screen = screen.substring(0, 10); // Begrenzung auf 10 Zeichen + } } + /** * 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 @@ -118,17 +133,39 @@ 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(); - }; + // Überprüfung - ob eine Operation ausgewählt wurde + if (latestOperation.isEmpty()) { + return; // Wenn keine Operation vorhanden ist passiert nichts + } + + double result; + double divisor = Double.parseDouble(screen); + + // Durchführung der Berechnung + switch(latestOperation) { + case "+" -> result = latestValue + divisor; + case "-" -> result = latestValue - divisor; + case "x" -> result = latestValue * divisor; + case "/" -> { + if (divisor == 0) { // Division durch Null + screen = "Error"; + return; // Methode verlassen + } + result = latestValue / divisor; + } + default -> throw new IllegalArgumentException("Ungültige Operation"); + } + + // Ergebnis auf den Bildschirm setzen screen = Double.toString(result); - if(screen.equals("Infinity")) screen = "Error"; - if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); - if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); - if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0,10); + + // Formatierung des Bildschirms + if (screen.endsWith(".0")) { + screen = screen.substring(0, screen.length() - 2); // Entfernt .0 + } + if (screen.contains(".") && screen.length() > 11) { + screen = screen.substring(0, 10); // Begrenzung auf 10 Zeichen + } //commit 3 - } + } \ No newline at end of file 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 32cb137..251600d 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -109,11 +109,11 @@ void testClearScreen() { void testNegativeDivisionByZero() { Calculator calc = new Calculator(); - calc.pressDigitKey(5);// 5 eingeben - calc.pressNegativeKey(); // 5- eingeben - calc.pressBinaryOperationKey("/");// geteilt - calc.pressDigitKey(0); // geteilt 0 - calc.pressEqualsKey(); // ergebnis berechnen + calc.pressDigitKey(9);// 9 eingeben + calc.pressNegativeKey(); // -9 eingeben + calc.pressBinaryOperationKey("/");// geteilt eingeben + calc.pressDigitKey(0); // geteilt 0 eingeben + calc.pressEqualsKey(); // ergebnis berechnen = error String expected = "Error"; //zeigt error an String actual = calc.readScreen(); //commit 2 - 1/2 - @@ -121,11 +121,12 @@ void testNegativeDivisionByZero() { assertEquals(expected, actual); } @Test - @DisplayName ("soll 'Error' anzeigen, wenn 1/x ohne Ausgangswert berechnet wird") + @DisplayName ("soll 'Error' ausgeben, wenn der Kehrwert von 0 ermittelt wird") void testInverseWithoutValue() { Calculator calc = new Calculator(); - calc.pressUnaryOperationKey("1/x"); // 1/x taste drücken + calc.pressDigitKey(0); // 0 eingeben + calc.pressUnaryOperationKey("1/x"); // 1/x taste drücken = 1 durch 0 ist nicht definiert String expected = "Error"; // zeigt error an String actual = calc.readScreen(); //commit 2 - 2/2 p From 5663af4fd82a73fffd46c4cf148ea76466504b37 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Sun, 3 Nov 2024 23:01:02 +0100 Subject: [PATCH 15/17] =?UTF-8?q?commit=203=20-=20bug=20fixes=20etc.=20und?= =?UTF-8?q?=20weitere=20=C3=A4nderungen=20p?= 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 | 2 +- 1 file changed, 1 insertion(+), 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 302f2a2..24389d6 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -165,7 +165,7 @@ public void pressEqualsKey() { } if (screen.contains(".") && screen.length() > 11) { screen = screen.substring(0, 10); // Begrenzung auf 10 Zeichen - } //commit 3 - + } //commit 3 - p } } \ No newline at end of file From 9e932342af24b0e972c748a3f7942c73a3007ec1 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Sun, 3 Nov 2024 23:12:33 +0100 Subject: [PATCH 16/17] =?UTF-8?q?commit=202-5=20-=20bug=20fixes=20f=C3=BCr?= =?UTF-8?q?=20die=20beiden=20roten=20tests=20etc.=20und=20weitere=20=C3=A4?= =?UTF-8?q?nderungen?= 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 | 2 +- 1 file changed, 1 insertion(+), 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 24389d6..3692086 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -165,7 +165,7 @@ public void pressEqualsKey() { } if (screen.contains(".") && screen.length() > 11) { screen = screen.substring(0, 10); // Begrenzung auf 10 Zeichen - } //commit 3 - p + } //commit 2-5 - 2 rote tests mit bugfixes } } \ No newline at end of file From 0587df689a92a9e177c3860a33683192366f6a54 Mon Sep 17 00:00:00 2001 From: elhassanmahmoud Date: Sun, 3 Nov 2024 23:12:52 +0100 Subject: [PATCH 17/17] =?UTF-8?q?commit=202-5=20-=20bug=20fixes=20f=C3=BCr?= =?UTF-8?q?=20die=20beiden=20roten=20tests=20etc.=20und=20weitere=20=C3=A4?= =?UTF-8?q?nderungen=20p?= 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 | 2 +- 1 file changed, 1 insertion(+), 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 3692086..cecb1bc 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -165,7 +165,7 @@ public void pressEqualsKey() { } if (screen.contains(".") && screen.length() > 11) { screen = screen.substring(0, 10); // Begrenzung auf 10 Zeichen - } //commit 2-5 - 2 rote tests mit bugfixes + } //commit 2-5 - 2 rote tests mit bugfixes -p } } \ No newline at end of file