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..09b55a0 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -86,6 +86,7 @@ public void pressUnaryOperationKey(String operation) { } + /** * 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 @@ -99,18 +100,25 @@ public void pressDotKey() { /** * Empfängt den Befehl der gedrückten Vorzeichenumkehrstaste ("+/-"). + * Überprüft, ob die Zahl 0 ist. Wenn die Zahl 0 ist, wird die Zahl nicht negativ. * 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; + if (screen.equals("0") || screen.isEmpty()) { + return; + } else { + screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; + + } } /** * Empfängt den Befehl der gedrückten "="-Taste. * Wurde zuvor keine Operationstaste gedrückt, passiert nichts. + * Überprüft, ob ein Wert zuvor eingegeben wurde. Falls nicht, wird Error ausgegeben. * 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 @@ -118,6 +126,10 @@ public void pressNegativeKey() { * und das Ergebnis direkt angezeigt. */ public void pressEqualsKey() { + if (latestOperation.isEmpty()) { + screen = "Error"; // Setze den Bildschirm auf "Error" wenn keine vorherige Operation + return; + } var result = switch(latestOperation) { case "+" -> latestValue + Double.parseDouble(screen); case "-" -> latestValue - Double.parseDouble(screen); @@ -130,4 +142,9 @@ public void pressEqualsKey() { 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 ddff0da..6af52ea 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -86,9 +86,50 @@ void testMultipleDecimalDots() { String actual = calc.readScreen(); assertEquals(expected, actual); + + + } + @Test + @DisplayName("should display result when multiplying two numbers") + void testMultiply() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(3); + calc.pressBinaryOperationKey("x"); + calc.pressDigitKey(5); + calc.pressEqualsKey(); + + String expected = "15"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + @Test + @DisplayName("should not change sign for an empty screen") + void testSignChangeOnEmptyScreen() { + Calculator calc = new Calculator(); + + calc.pressNegativeKey(); // Vorzeichen ändern auf leerem Bildschirm + + String expected = "0"; // Erwartete Ausgabe + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + @Test + @DisplayName("should display error when equals is pressed without a previous operation") + void testEqualsWithoutOperation() { + Calculator calc = new Calculator(); + + // Keine Operation, einfach die „=“-Taste drücken + calc.pressEqualsKey(); + + String expected = "Error"; // Erwartete Ausgabe + String actual = calc.readScreen(); + + assertEquals(expected, actual); } - //TODO hier weitere Tests erstellen }