diff --git a/README.md b/README.md index ca0f7ebb..f176df13 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # Hausaufgabe 1 -Deadline für Abgabe per Pull Request: 24.10.2021 23:59 Uhr bzw. 27.10.2021 23:59 Uhr je nach dem in welcher Übungsgruppe Sie eingeschrieben sind. +Deadline für Abgabe per Pull Request: 21.04.2022 23:59 Uhr. Außerdem ist zusätzlich eine persönliche Abnahme in der von Ihnen belegten Übungsgruppe notwendig, um zu bestehen. Bei unentschuldigtem Fehlen in der auf die Deadline folgenden Übung, wird die Hausaufgabe als nicht bestanden bewertet. ## Aufgabenstellung -- Forken Sie dieses Repository (github.com/prog2-ws21/ha1) in Ihren eigenen GitHub Account. +- Forken Sie dieses Repository (github.com/prog2-ss22/ha1) in Ihren eigenen GitHub Account. - Analysieren Sie das Verhalten der Klasse `Calculator` und finden Sie ein paar Abweichungen im Vergleich zu `www.online-calculator.com` und/oder zu dem im JavaDoc beschriebenen Verhalten. - Teilaufgabe 1: Schreiben Sie einen neuen zusätzlichen Test, der eine bisher nicht getestete Funktionalität abdeckt, die bereits funktioniert und der daher direkt grün wird. - Teilaufgabe 2: Schreiben Sie zwei weitere zusätzliche Tests, die zwei unterschiedliche Fehlerkategorien aufdecken (d.h. deren Fehlerursachen in unterschiedlichen Methoden liegen) und somit fehlschlagen. 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 aaef8862..8365aa01 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -9,11 +9,9 @@ public class Calculator { private String screen = "0"; - private double latestValue; - private String latestOperation = ""; - + private double result; /** * @return den aktuellen Bildschirminhalt als String */ @@ -31,9 +29,17 @@ public String readScreen() { public void pressDigitKey(int digit) { 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; + + if(!latestOperation.equals("")) calcResult(); + latestOperation =""; + + + + // if (latestValue != 0){ pressEqualsKey();} + } /** @@ -60,7 +66,7 @@ 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); + latestValue = Double.parseDouble(readScreen()); latestOperation = operation; } @@ -116,16 +122,23 @@ public void pressNegativeKey() { * 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); + public void calcResult() { + + switch (latestOperation) { + case "+": result = latestValue + Double.parseDouble(screen); break; + case "-": result = latestValue - Double.parseDouble(screen);break; + case "x": result = latestValue * Double.parseDouble(screen);break; + case "/": + if (readScreen().equals("0")) screen = "Error"; + else result = latestValue / Double.parseDouble(screen); break; + + default: throw new IllegalArgumentException(); + } + if (!screen.equals("Error")) {screen = Double.toString(result);} if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + } + + public double pressEqualsKey(){return result;} } 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 addc5f26..381c85f1 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -9,35 +9,86 @@ class CalculatorTest { @Test - @DisplayName("should display result after adding two positive multi-digit numbers") - void testPositiveAddition() { + @DisplayName("should display result after getting the square root of two") + void testSquareRoot() { Calculator calc = new Calculator(); calc.pressDigitKey(2); + calc.pressUnaryOperationKey("√"); + + String expected = "1.41421356"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test + @DisplayName("should display the difference of two positive single digits ") + + void testPositiveSubtraction() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(3); + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(8); + calc.pressEqualsKey(); + + String expected = "-5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test + @DisplayName("should transform a positiv binary number as %, without pressing the equals key") + void testAsPercent() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(1); calc.pressDigitKey(0); - calc.pressBinaryOperationKey("+"); + calc.pressUnaryOperationKey("%"); + + String expected = "0.1"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test + @DisplayName("should display \"Error\" after dividing a single digit by zero") + void testDivideByZero() { + Calculator calc = new Calculator(); + calc.pressDigitKey(2); + calc.pressBinaryOperationKey("/"); calc.pressDigitKey(0); - calc.pressEqualsKey(); + // calc.pressEqualsKey(); - String expected = "40"; + String expected = "Error"; String actual = calc.readScreen(); assertEquals(expected, actual); } @Test - @DisplayName("should display result after getting the square root of two") - void testSquareRoot() { + @DisplayName("should display the result of a multiple addition of three positive single digit numbers") + + void testMultipleAddition() { + Calculator calc = new Calculator(); calc.pressDigitKey(2); - calc.pressUnaryOperationKey("√"); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(3); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(5); + // calc.pressEqualsKey(); //wir brauchen pressEqualskey() in pressDigit() - falls (latest value != "") pressEqualsKey - String expected = "1.41421356"; + String expected = "10"; String actual = calc.readScreen(); assertEquals(expected, actual); + } //TODO hier weitere Tests erstellen