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..d8ee6236 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -1,5 +1,7 @@ package htw.berlin.prog2.ha1; +import java.text.NumberFormat; + /** * Eine Klasse, die das Verhalten des Online Taschenrechners imitiert, welcher auf * https://www.online-calculator.com/ aufgerufen werden kann (ohne die Memory-Funktionen) @@ -78,10 +80,16 @@ public void pressUnaryOperationKey(String operation) { case "√" -> Math.sqrt(Double.parseDouble(screen)); case "%" -> Double.parseDouble(screen) / 100; case "1/x" -> 1 / Double.parseDouble(screen); + case "recip" -> (1 / (Double.parseDouble(screen))); default -> throw new IllegalArgumentException(); }; - screen = Double.toString(result); - if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + //screen = Double.toString(result); + //if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + + // QuellIdee https://www.youtube.com/watch?v=KLvnQhdx4BI Java: formatting numbers with NumberFormat + NumberFormat nf = NumberFormat.getNumberInstance(); //initialize numberformat + nf.setMaximumFractionDigits(8); //max number of decimal digits + screen = nf.format(result);//rounded operation } @@ -93,7 +101,7 @@ public void pressUnaryOperationKey(String operation) { * Beim zweimaligem Drücken, oder wenn bereits ein Trennzeichen angezeigt wird, passiert nichts. */ public void pressDotKey() { - if(!screen.endsWith(".")) screen = screen + "."; + if(!screen.contains(".")) screen = screen + "."; } /** 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..a458ee0c 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -34,12 +34,68 @@ void testSquareRoot() { calc.pressDigitKey(2); calc.pressUnaryOperationKey("√"); - String expected = "1.41421356"; + String expected = "1,41421356"; String actual = calc.readScreen(); assertEquals(expected, actual); } //TODO hier weitere Tests erstellen + @Test + @DisplayName("should display correct number after pressing digit keys") + void testDigitInput() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(4); + calc.pressDigitKey(2); + + String expected = "42"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + @Test + @DisplayName("should clear all latest values and inputs by pressing the CE button") + void testClearAllValues() { + Calculator calc = new Calculator(); + calc.pressDigitKey(2); + calc.pressBinaryOperationKey("+"); + calc.pressClearKey(); + + String expected = "0"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + @Test + @DisplayName("should display reciprocal of a number") + void testReciprocal() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(6); + calc.pressUnaryOperationKey("recip"); + + String expected = "0,16666667"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + @Test + @DisplayName("should display only one decimal point") + void testDotKey() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(6); + calc.pressDotKey(); + calc.pressDigitKey(6); + calc.pressDotKey(); + + String expected = "6.6"; + String actual = calc.readScreen(); + System.out.println(calc.readScreen()); + + + assertEquals(expected, actual); + } }