diff --git a/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 84c04f2..1251d4c 100644 --- a/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -2,17 +2,18 @@ /** * Eine Klasse, die das Verhalten des Online Taschenrechners imitiert, welcher auf - * https://www.online-calculator.com/ aufgerufen werden kann (ohne die Memory-Funktionen) + * ....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 { - +//s private String screen = "0"; private double latestValue; private String latestOperation = ""; + private boolean clearkey = false; /** * @return den aktuellen Bildschirminhalt als String @@ -20,7 +21,7 @@ public class Calculator { public String readScreen() { return screen; } - +// internet candela no funciona /** * 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. @@ -36,18 +37,36 @@ public void pressDigitKey(int digit) { 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. + // */ + + /** - * 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. + * Clears the display. + * First press = only the display is reset to "0" + * Second press = everything is reset. no more values saved. */ public void pressClearKey() { - screen = "0"; - latestOperation = ""; - latestValue = 0.0; + //screen = "0"; + //latestOperation = ""; + //latestValue = 0.0; + + if (!clearkey) { + screen = "0"; + clearkey = true; + } else { + screen = "0"; + latestOperation = ""; + latestValue = 0.0; + clearkey =false; + + } } /** @@ -97,15 +116,27 @@ 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. + //*/ + /** - * 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. + * if the number is positive, a minus sign comes to the front + * If the number is negative, the minus sign will be removed. + * if the display shows 0, the value remains. no changes */ + + public void pressNegativeKey() { - screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; + //screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; + if (screen.equals("0")) { + return; + } + screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; } /** diff --git a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index ddff0da..7c19610 100644 --- a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -87,8 +87,37 @@ void testMultipleDecimalDots() { assertEquals(expected, actual); } +@Test +@DisplayName("should change the sign from positive to negative") + void firstGreenTest() { + Calculator calc = new Calculator(); + calc.pressDigitKey(1); + calc.pressNegativeKey(); + assertEquals("-1",calc.readScreen()); +} +@Test + @DisplayName("should not exist a -0") + void firstRedTest() { + Calculator calc = new Calculator(); + + calc.pressNegativeKey(); + + assertEquals("0" , calc.readScreen()); +} - //TODO hier weitere Tests erstellen +@Test + @DisplayName("the clearkey should not clear all saved digitkeys.") + void secondRedTest() { + Calculator calc = new Calculator(); + calc.pressDigitKey(1); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(1); + calc.pressClearKey(); + calc.pressDigitKey(2); + calc.pressEqualsKey(); + + assertEquals("3", calc.readScreen()); +} }