From b3abc338db926f56becb06b5e3593507e7bb456f Mon Sep 17 00:00:00 2001 From: xUnraved Date: Mon, 22 Apr 2024 10:59:02 +0200 Subject: [PATCH 1/7] Anpassung null Analysis + Test Nachricht --- 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 84c04f21..b3813ee7 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -5,6 +5,7 @@ * 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. + * Nachricht Test. */ public class Calculator { From 0dbeaf6232ce8d4bdca2e42aca607ed607d1a4c8 Mon Sep 17 00:00:00 2001 From: xUnraved Date: Mon, 22 Apr 2024 10:59:36 +0200 Subject: [PATCH 2/7] Null Analysis Enable --- .vscode/settings.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..7b016a89 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.compile.nullAnalysis.mode": "automatic" +} \ No newline at end of file From 38120713d04bc99b23f4b6f03d3192633bc2d515 Mon Sep 17 00:00:00 2001 From: xUnraved Date: Mon, 22 Apr 2024 11:35:23 +0200 Subject: [PATCH 3/7] TA01 + Anpassung settings dammit funktioniert --- .vscode/settings.json | 6 ++++-- .../htw/berlin/prog2/ha1/CalculatorTest.java | 21 ++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7b016a89..0662769b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,5 @@ { - "java.compile.nullAnalysis.mode": "automatic" -} \ No newline at end of file + "java.jdt.ls.java.home": "C:\\Program Files\\Java\\jdk-22", + "java.compile.nullAnalysis.mode": "automatic", + "java.debug.settings.onBuildFailureProceed": true +} 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..b7f4f7a6 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -89,6 +89,25 @@ void testMultipleDecimalDots() { } - //TODO hier weitere Tests erstellen + //Teilaufgabe 01 - zusätzlicher Test + @Test + @DisplayName("should display result when dividing a positive multi-digit number with another single-digit number") + void testDivisionByDecimal() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(4); + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("/"); + calc.pressDigitKey(9); + calc.pressEqualsKey(); + + String expected = "5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + + } From 3b7cdfad897def61850661713cb42d8f5490845d Mon Sep 17 00:00:00 2001 From: xUnraved Date: Mon, 22 Apr 2024 11:41:31 +0200 Subject: [PATCH 4/7] TA02 - Fehlgeschlagener Test --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 19 ++++++++++++++++++- 1 file changed, 18 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 b7f4f7a6..8314f187 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -107,7 +107,24 @@ void testDivisionByDecimal() { assertEquals(expected, actual); } - + //Teilaufgabe 02 + + @Test + @DisplayName("should repeat last operation on continuous equals presses") + void testRepeatLastOperation() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(3); + calc.pressEqualsKey(); + calc.pressEqualsKey(); + + String expected = "11"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } } From 0ffb4595880d27981e7f56c862c19f0ae2c12093 Mon Sep 17 00:00:00 2001 From: xUnraved Date: Mon, 22 Apr 2024 11:50:34 +0200 Subject: [PATCH 5/7] TA03 - Bugfix zu Test01 - TA02 --- .../java/htw/berlin/prog2/ha1/Calculator.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 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 b3813ee7..48ca354f 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -119,16 +119,25 @@ 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); + + if (latestOperation.isEmpty()) return; + + double newValue = Double.parseDouble(screen); + double result = switch(latestOperation) { + case "+" -> latestValue + newValue; + case "-" -> latestValue - newValue; + case "x" -> latestValue * newValue; + case "/" -> latestValue / newValue; default -> throw new IllegalArgumentException(); + }; + + latestValue = newValue; // Aktualisiere latestValue für wiederholte Operationen 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); - } + + } + } From 32c9ac075fe1934328fe0b3b787d0a339c4de88d Mon Sep 17 00:00:00 2001 From: xUnraved Date: Sat, 27 Apr 2024 10:05:31 +0200 Subject: [PATCH 6/7] TA02 - Fehlgeschlagener Test02 --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 20 ++++++++++++++++++- 1 file changed, 19 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 8314f187..8a244927 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -125,6 +125,24 @@ void testRepeatLastOperation() { assertEquals(expected, actual); } - + + @Test + @DisplayName("should repeat last operation on continuous equals presses") + void testNewNumberAfterResult() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(3); + calc.pressEqualsKey(); + calc.pressDigitKey(3); + calc.pressEqualsKey(); + + String expected = "6"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + } From 07e5c8d94e92d48f24c47f7d1d9f0b9123e56ae7 Mon Sep 17 00:00:00 2001 From: xUnraved Date: Sun, 28 Apr 2024 09:41:41 +0200 Subject: [PATCH 7/7] Nur Cleanup, nix gefixt --- .../java/htw/berlin/prog2/ha1/Calculator.java | 34 +++++++++++++++++-- 1 file changed, 32 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 48ca354f..58ed8f02 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -19,7 +19,9 @@ public class Calculator { * @return den aktuellen Bildschirminhalt als String */ public String readScreen() { + return screen; + } /** @@ -30,11 +32,13 @@ public String readScreen() { * @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; + } /** @@ -46,9 +50,13 @@ public void pressDigitKey(int digit) { * im Ursprungszustand ist. */ public void pressClearKey() { + screen = "0"; + latestOperation = ""; + latestValue = 0.0; + } /** @@ -61,8 +69,11 @@ 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); + latestOperation = operation; + } /** @@ -73,16 +84,24 @@ 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) { + 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); } @@ -95,7 +114,9 @@ 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 + "."; + } /** @@ -106,7 +127,9 @@ public void pressDotKey() { * entfernt und der Inhalt fortan als positiv interpretiert. */ public void pressNegativeKey() { + screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; + } /** @@ -123,21 +146,28 @@ public void pressEqualsKey() { if (latestOperation.isEmpty()) return; double newValue = Double.parseDouble(screen); + double result = switch(latestOperation) { + case "+" -> latestValue + newValue; case "-" -> latestValue - newValue; case "x" -> latestValue * newValue; case "/" -> latestValue / newValue; + default -> throw new IllegalArgumentException(); }; - latestValue = newValue; // Aktualisiere latestValue für wiederholte Operationen + latestValue = newValue; + 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); } -} +} \ No newline at end of file