Skip to content
42 changes: 30 additions & 12 deletions app/src/main/java/htw/berlin/prog2/ha1/Calculator.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,10 @@ public void pressClearKey() {
* @param operation "+" für Addition, "-" für Substraktion, "x" für Multiplikation, "/" für Division
*/
public void pressBinaryOperationKey(String operation) {
if (!latestOperation.isEmpty()) pressEqualsKey();
latestValue = Double.parseDouble(screen);
latestOperation = operation;

}

/**
Expand Down Expand Up @@ -110,24 +112,40 @@ public void pressNegativeKey() {

/**
* Empfängt den Befehl der gedrückten "="-Taste.
* Wurde zuvor keine Operationstaste gedrückt, passiert nichts.
* Wurde zuvor keine Operationstaste gedrückt, wird die Eingegebene Zahl auf dem Bildschirm 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
* 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);
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);
if (!latestOperation.isEmpty()) {
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);
case "" -> Double.parseDouble(screen);
default -> throw new IllegalArgumentException();


};
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);
} else {
return;
}


}



}




53 changes: 53 additions & 0 deletions app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,60 @@ void testMultipleDecimalDots() {
assertEquals(expected, actual);
}

@Test
@DisplayName("should display result after multiplying two numbers")
void testMultiplication() {
Calculator calc = new Calculator();

calc.pressDigitKey(3);
calc.pressBinaryOperationKey("x");
calc.pressDigitKey(4);
calc.pressEqualsKey();

String expected = "12";
String actual = calc.readScreen();

assertEquals(expected, actual);
}

// Teilaufgabe 2.1
@Test
@DisplayName("should display latest number after pressing equals")
void testEqualKey() {
Calculator calc = new Calculator();
calc.pressDigitKey(5);
calc.pressEqualsKey();

String expected = "5";
String actual = calc.readScreen();

assertEquals(expected, actual);

}
// Teiaufgabe 2.2

@Test
@DisplayName("should display result after adding multiple positive multi-digit numbers")
void testPositiveAdditionWithMultipleDigits() {
Calculator calc = new Calculator();

calc.pressDigitKey(7);
calc.pressDigitKey(0);
calc.pressBinaryOperationKey("+");
calc.pressDigitKey(1);
calc.pressDigitKey(0);
calc.pressBinaryOperationKey("+");
calc.pressDigitKey(7);
calc.pressDigitKey(0);
calc.pressEqualsKey();

String expected = "150";
String actual = calc.readScreen();

assertEquals(expected, actual);
}

//TODO hier weitere Tests erstellen

}