Skip to content
Open
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
36 changes: 28 additions & 8 deletions src/main/java/htw/berlin/prog2/ha1/Calculator.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ public class Calculator {

private String latestOperation = "";

private double lastOperand = 0; // Variable soll sich rechten Wert merken



/**
* @return den aktuellen Bildschirminhalt als String
*/
Expand Down Expand Up @@ -105,7 +109,10 @@ public void pressDotKey() {
* entfernt und der Inhalt fortan als positiv interpretiert.
*/
public void pressNegativeKey() {

screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen;


}

/**
Expand All @@ -118,14 +125,27 @@ public void pressNegativeKey() {
* 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);

double result = Double.parseDouble(screen);

if (!latestOperation.isEmpty()) { // wenn z.B. 2= eingegeben wurde wird das geskippt
if (lastOperand == 0) {
lastOperand = result; //speichert den rechten Operand, wenn es das erste mal = ist (bei 3+2 wird 2 gespeichert)
}
switch (latestOperation) {
case "+" -> result = latestValue + lastOperand;
case "-" -> result = latestValue - lastOperand;
case "x" -> result = latestValue * lastOperand;
case "/" -> result = latestValue / lastOperand;
//default -> Double.parseDouble(screen);
//default -> throw new IllegalArgumentException();
}
latestValue = result; // Ergebnis neuer linker Operand
}


screen = Double.toString(result); //Ergebnis wird angezeigt

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);
Expand Down
112 changes: 111 additions & 1 deletion src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,115 @@ void testMultipleDecimalDots() {


//TODO hier weitere Tests erstellen
}

/* @Test
@DisplayName("should display result after adding a positiv multi-digit number and a negative multi-digit number")
void testNegativeKey() {
Calculator calc = new Calculator();

calc.pressDigitKey(4);
calc.pressBinaryOperationKey("+");
calc.pressNegativeKey();
calc.pressDigitKey(3);
calc.pressEqualsKey();

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

assertEquals(expected, actual);
//failed
}
*/

@Test
@DisplayName("should display result after multiply two positiv multi-digit numbers")
void testPositiveMultiply() {
Calculator calc = new Calculator();

calc.pressDigitKey(7);
calc.pressBinaryOperationKey("x");
calc.pressDigitKey(2);
calc.pressEqualsKey();

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

assertEquals(expected, actual);
//funktioniert
}

@Test
@DisplayName("should display multi-digit number")
void test() {
Calculator calc = new Calculator();

calc.pressDigitKey(2);
calc.pressEqualsKey();

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

assertEquals(expected, actual);
//Fehler wurde behoben
}

/*
@Test
@DisplayName("should display result after adding 3 multi-digit numbers")
void testAddingThreeNumbers() {
Calculator calc = new Calculator();

calc.pressDigitKey(2);
calc.pressBinaryOperationKey("+");
calc.pressDigitKey(2);
calc.pressBinaryOperationKey("+");
calc.pressDigitKey(2);
calc.pressEqualsKey();

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

assertEquals(expected, actual);
//failed
}
*/

/*
@Test
@DisplayName("should not ...")
void testSpace() {
Calculator calc = new Calculator();

calc.pressDigitKey(5);
calc.pressBinaryOperationKey("+");
calc.pressDotKey();
calc.pressDigitKey(2);
calc.pressEqualsKey();

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

assertEquals(expected, actual);
//fehler
}
*/

@Test
@DisplayName("should display result after pressing the EqualsKey twice after an addition")
void testDoubleEqualsKey() {
Calculator calc = new Calculator();

calc.pressDigitKey(5);
calc.pressBinaryOperationKey("+");
calc.pressDigitKey(2);
calc.pressEqualsKey();
calc.pressEqualsKey();

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

assertEquals(expected, actual);
//fehler wurde behoben
}

}