From dd2bd832c46227dc32515fed52fa1ffa3dfc129d Mon Sep 17 00:00:00 2001 From: mo-sh44 Date: Sat, 2 Nov 2024 12:55:00 +0100 Subject: [PATCH 1/6] HA1 --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 40 +++++++++++++++++++ 1 file changed, 40 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..c87b7f5 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -40,6 +40,46 @@ void testSquareRoot() { assertEquals(expected, actual); } + + //Teilaufgabe ha1 1.grüner Test minus 2 positive nummer + @Test + @DisplayName("should display result after minus two positive multi-digit numbers") + void testPositiveMinus() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(4); + calc.pressDigitKey(0); + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(3); + calc.pressDigitKey(0); + calc.pressEqualsKey(); + + String expected = "10"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + + +//Teilaufgabe1 ha1 2.grüner Test division 2 positive nummer + @Test + @DisplayName("should display result after division two positive multi-digit numbers") + void testPositiveDivision() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(2); + calc.pressBinaryOperationKey("/"); + calc.pressDigitKey(2); + calc.pressEqualsKey(); + + String expected = "1"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test @DisplayName("should display error when dividing by zero") void testDivisionByZero() { From 478ee83b87f9eca2a0ec271a194f434e2fafdf7c Mon Sep 17 00:00:00 2001 From: mo-sh44 Date: Sun, 3 Nov 2024 14:11:44 +0100 Subject: [PATCH 2/6] =?UTF-8?q?Ein=20Gr=C3=BCn=20Test=20hinzuf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 2 + .../htw/berlin/prog2/ha1/CalculatorTest.java | 64 +++++++------------ 2 files changed, 25 insertions(+), 41 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..2ea3c88 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -72,6 +72,7 @@ public void pressBinaryOperationKey(String operation) { * @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) { @@ -129,5 +130,6 @@ public void pressEqualsKey() { 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); + } } 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 c87b7f5..f3364fe 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -40,46 +40,6 @@ void testSquareRoot() { assertEquals(expected, actual); } - - //Teilaufgabe ha1 1.grüner Test minus 2 positive nummer - @Test - @DisplayName("should display result after minus two positive multi-digit numbers") - void testPositiveMinus() { - Calculator calc = new Calculator(); - - calc.pressDigitKey(4); - calc.pressDigitKey(0); - calc.pressBinaryOperationKey("-"); - calc.pressDigitKey(3); - calc.pressDigitKey(0); - calc.pressEqualsKey(); - - String expected = "10"; - String actual = calc.readScreen(); - - assertEquals(expected, actual); - } - - - -//Teilaufgabe1 ha1 2.grüner Test division 2 positive nummer - @Test - @DisplayName("should display result after division two positive multi-digit numbers") - void testPositiveDivision() { - Calculator calc = new Calculator(); - - calc.pressDigitKey(2); - calc.pressBinaryOperationKey("/"); - calc.pressDigitKey(2); - calc.pressEqualsKey(); - - String expected = "1"; - String actual = calc.readScreen(); - - assertEquals(expected, actual); - } - - @Test @DisplayName("should display error when dividing by zero") void testDivisionByZero() { @@ -130,5 +90,27 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen -} + //Teilaufgabe 1: neu grüner Test + @Test + @DisplayName("should display result after minus two positive multi-digit numbers") + void testPositiveMinus() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(2); + calc.pressDigitKey(0); + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(1); + calc.pressDigitKey(0); + calc.pressEqualsKey(); + + String expected = "10"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + + + +} \ No newline at end of file From a73a226b7e5933a5aefb358e48f02885fc8909e0 Mon Sep 17 00:00:00 2001 From: mo-sh44 Date: Sun, 3 Nov 2024 17:34:07 +0100 Subject: [PATCH 3/6] =?UTF-8?q?Zwei=20Rote=20Testen=20hinzuf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 34 +++++++++++++++++++ 1 file changed, 34 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 f3364fe..670eba3 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -111,6 +111,40 @@ void testPositiveMinus() { } + //Teilaufgabe 2: Zwei Roter Testen hinzufügen + @Test + @DisplayName("should display error when a non-numeric key is pressed") + void testNonNumericInput() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("+"); + calc.pressUnaryOperationKey("x"); + + String expected = "Error"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + + + @Test + @DisplayName("should correctly display result after adding a negative and a positive number") + void testNegativeAddition() { + Calculator calc = new Calculator(); + + calc.pressNegativeKey(); + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(3); + calc.pressEqualsKey(); + + String expected = "-2"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } } \ No newline at end of file From 92176fcf62e98700d96769b8fbeba42e784cd19e Mon Sep 17 00:00:00 2001 From: mo-sh44 Date: Sun, 3 Nov 2024 22:20:44 +0100 Subject: [PATCH 4/6] =?UTF-8?q?Zwei=20Rote=20Testen=20hinzuf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 30 +++++++++++-------- .../htw/berlin/prog2/ha1/CalculatorTest.java | 10 +++---- 2 files changed, 23 insertions(+), 17 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 2ea3c88..309b5fe 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -26,12 +26,13 @@ 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(); - if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if (screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; screen = screen + digit; } @@ -57,33 +58,35 @@ 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) { + 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) { + 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); + if (screen.equals("NaN")) screen = "Error"; + if (screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); } @@ -95,7 +98,7 @@ public void pressUnaryOperationKey(String operation) { * 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 + "."; } /** @@ -119,7 +122,8 @@ public void pressNegativeKey() { * und das Ergebnis direkt angezeigt. */ public void pressEqualsKey() { - var result = switch(latestOperation) { + + var result = switch (latestOperation) { case "+" -> latestValue + Double.parseDouble(screen); case "-" -> latestValue - Double.parseDouble(screen); case "x" -> latestValue * Double.parseDouble(screen); @@ -127,9 +131,11 @@ public void pressEqualsKey() { 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); + + 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); } } + 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 670eba3..741151a 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -130,17 +130,17 @@ void testNonNumericInput() { @Test - @DisplayName("should correctly display result after adding a negative and a positive number") - void testNegativeAddition() { + @DisplayName("should correctly handle addition between positive and negative numbers") + void testPositiveAndNegativeAddition() { Calculator calc = new Calculator(); - calc.pressNegativeKey(); - calc.pressDigitKey(5); + calc.pressDigitKey(7); calc.pressBinaryOperationKey("+"); + calc.pressNegativeKey(); calc.pressDigitKey(3); calc.pressEqualsKey(); - String expected = "-2"; + String expected = "4"; // 7 + (-3) = 4 String actual = calc.readScreen(); assertEquals(expected, actual); From 40d7479a0e5299c186b15df0bb52bc1ac3f9a0bb Mon Sep 17 00:00:00 2001 From: mo-sh44 Date: Sun, 3 Nov 2024 22:26:14 +0100 Subject: [PATCH 5/6] Bug Fixes in testNonNumericInput --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 5 +++++ 1 file changed, 5 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 309b5fe..3f2ef29 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -76,6 +76,11 @@ public void pressBinaryOperationKey(String operation) { */ public void pressUnaryOperationKey(String operation) { + if (!latestOperation.isEmpty() && !screen.equals("0")) { + screen = "Error"; // Zeigt einen Fehler an, wenn eine neue Operation eingegeben wird, ohne die vorherige zu beenden + return; + } + latestValue = Double.parseDouble(screen); latestOperation = operation; var result = switch (operation) { From 1e881f607fc9f91865eca296abe024c58934904e Mon Sep 17 00:00:00 2001 From: mo-sh44 Date: Sun, 3 Nov 2024 22:35:34 +0100 Subject: [PATCH 6/6] Bug Fixes in testPositiveAndNegativeAddition --- .../main/java/htw/berlin/prog2/ha1/Calculator.java | 12 +++++++++++- 1 file changed, 11 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 3f2ef29..81c5a5c 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -62,8 +62,18 @@ public void pressClearKey() { * @param operation "+" für Addition, "-" für Substraktion, "x" für Multiplikation, "/" für Division */ public void pressBinaryOperationKey(String operation) { - latestValue = Double.parseDouble(screen); + + if (screen.startsWith("-") && latestOperation.isEmpty()) { + latestValue = Double.parseDouble(screen); + } else if (!latestOperation.isEmpty()) { + latestValue = latestValue + Double.parseDouble(screen); + } else { + latestValue = Double.parseDouble(screen); + } + latestOperation = operation; + screen = "0"; + } /**