Skip to content
Open

ha1 #91

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions app/src/main/java/htw/berlin/prog2/ha1/Calculator.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ 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")) screen = "";

screen = screen + digit;
}
Expand All @@ -57,11 +57,17 @@ public void pressClearKey() {
* Rechner in den passenden Operationsmodus versetzt.
* Beim zweiten Drücken nach Eingabe einer weiteren Zahl wird direkt des aktuelle Zwischenergebnis
* auf dem Bildschirm angezeigt. Falls hierbei eine Division durch Null auftritt, wird "Error" angezeigt.
* Diese Methode ermöglicht es dem Benutzer, mehrere aufeinanderfolgende Berechnungen durchzuführen,
* indem sie das Zwischenergebnis berechnet, bevor eine neue Operation eingegeben wird.
* @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;
screen = "0";
}

/**
Expand All @@ -82,6 +88,7 @@ public void pressUnaryOperationKey(String operation) {
};
screen = Double.toString(result);
if(screen.equals("NaN")) screen = "Error";
if(screen.endsWith(".0")) screen = screen.substring(0, screen.length() - 2);
if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10);

}
Expand Down Expand Up @@ -118,7 +125,7 @@ public void pressNegativeKey() {
* und das Ergebnis direkt angezeigt.
*/
public void pressEqualsKey() {
var result = switch(latestOperation) {
double result = switch(latestOperation) {
case "+" -> latestValue + Double.parseDouble(screen);
case "-" -> latestValue - Double.parseDouble(screen);
case "x" -> latestValue * Double.parseDouble(screen);
Expand All @@ -130,4 +137,5 @@ 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);
}

}
55 changes: 54 additions & 1 deletion 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 subtracting two positive multi-digit numbers")
void testPositiveSubtraction() {
Calculator calc = new Calculator();

calc.pressDigitKey(5);
calc.pressDigitKey(0);
calc.pressBinaryOperationKey("-");
calc.pressDigitKey(2);
calc.pressDigitKey(0);
calc.pressEqualsKey();

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

assertEquals(expected, actual);
}

@Test
@DisplayName("should display result after calculating three positive multi-digit numbers")
void testCalculateThreeNumbers() {
Calculator calc = new Calculator();

calc.pressDigitKey(7);
calc.pressDigitKey(7);
calc.pressBinaryOperationKey("-");
calc.pressDigitKey(7);
calc.pressDigitKey(9);
calc.pressBinaryOperationKey("+");
calc.pressDigitKey(8);
calc.pressDigitKey(0);
calc.pressEqualsKey();

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

assertEquals(expected, actual);
}

@Test
@DisplayName("should display percentage of a multi-digit number")
void testPercentageCalculation() {
Calculator calc = new Calculator();

calc.pressDigitKey(2);
calc.pressDigitKey(0);
calc.pressDigitKey(0);
calc.pressUnaryOperationKey("%");

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

assertEquals(expected, actual);
}

//TODO hier weitere Tests erstellen
}