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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Hausaufgabe 1

Deadline für Abgabe per Pull Request: 24.10.2021 23:59 Uhr bzw. 27.10.2021 23:59 Uhr je nach dem in welcher Übungsgruppe Sie eingeschrieben sind.
Deadline für Abgabe per Pull Request: 21.04.2022 23:59 Uhr. Außerdem ist zusätzlich eine persönliche Abnahme in der von Ihnen belegten Übungsgruppe notwendig, um zu bestehen. Bei unentschuldigtem Fehlen in der auf die Deadline folgenden Übung, wird die Hausaufgabe als nicht bestanden bewertet.

## Aufgabenstellung

- Forken Sie dieses Repository (github.com/prog2-ws21/ha1) in Ihren eigenen GitHub Account.
- Forken Sie dieses Repository (github.com/prog2-ss22/ha1) in Ihren eigenen GitHub Account.
- Analysieren Sie das Verhalten der Klasse `Calculator` und finden Sie ein paar Abweichungen im Vergleich zu `www.online-calculator.com` und/oder zu dem im JavaDoc beschriebenen Verhalten.
- Teilaufgabe 1: Schreiben Sie einen neuen zusätzlichen Test, der eine bisher nicht getestete Funktionalität abdeckt, die bereits funktioniert und der daher direkt grün wird.
- Teilaufgabe 2: Schreiben Sie zwei weitere zusätzliche Tests, die zwei unterschiedliche Fehlerkategorien aufdecken (d.h. deren Fehlerursachen in unterschiedlichen Methoden liegen) und somit fehlschlagen.
Expand Down
41 changes: 27 additions & 14 deletions app/src/main/java/htw/berlin/prog2/ha1/Calculator.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@
public class Calculator {

private String screen = "0";

private double latestValue;

private String latestOperation = "";

private double result;
/**
* @return den aktuellen Bildschirminhalt als String
*/
Expand All @@ -31,9 +29,17 @@ 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") || latestValue == Double.parseDouble(screen)) {screen = "";}

screen = screen + digit;

if(!latestOperation.equals("")) calcResult();
latestOperation ="";



// if (latestValue != 0){ pressEqualsKey();}

}

/**
Expand All @@ -60,7 +66,7 @@ public void pressClearKey() {
* @param operation "+" für Addition, "-" für Substraktion, "x" für Multiplikation, "/" für Division
*/
public void pressBinaryOperationKey(String operation) {
latestValue = Double.parseDouble(screen);
latestValue = Double.parseDouble(readScreen());
latestOperation = operation;
}

Expand Down Expand Up @@ -116,16 +122,23 @@ public void pressNegativeKey() {
* 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);
public void calcResult() {

switch (latestOperation) {
case "+": result = latestValue + Double.parseDouble(screen); break;
case "-": result = latestValue - Double.parseDouble(screen);break;
case "x": result = latestValue * Double.parseDouble(screen);break;
case "/":
if (readScreen().equals("0")) screen = "Error";
else result = latestValue / Double.parseDouble(screen); break;

default: throw new IllegalArgumentException();
}
if (!screen.equals("Error")) {screen = Double.toString(result);}
if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2);
if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10);

}

public double pressEqualsKey(){return result;}
}
69 changes: 60 additions & 9 deletions app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,86 @@
class CalculatorTest {

@Test
@DisplayName("should display result after adding two positive multi-digit numbers")
void testPositiveAddition() {
@DisplayName("should display result after getting the square root of two")
void testSquareRoot() {
Calculator calc = new Calculator();

calc.pressDigitKey(2);
calc.pressUnaryOperationKey("√");

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

assertEquals(expected, actual);
}

@Test
@DisplayName("should display the difference of two positive single digits ")

void testPositiveSubtraction() {
Calculator calc = new Calculator();

calc.pressDigitKey(3);
calc.pressBinaryOperationKey("-");
calc.pressDigitKey(8);
calc.pressEqualsKey();

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

assertEquals(expected, actual);
}

@Test
@DisplayName("should transform a positiv binary number as %, without pressing the equals key")
void testAsPercent() {
Calculator calc = new Calculator();

calc.pressDigitKey(1);
calc.pressDigitKey(0);
calc.pressBinaryOperationKey("+");
calc.pressUnaryOperationKey("%");

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

assertEquals(expected, actual);
}

@Test
@DisplayName("should display \"Error\" after dividing a single digit by zero")
void testDivideByZero() {
Calculator calc = new Calculator();

calc.pressDigitKey(2);
calc.pressBinaryOperationKey("/");
calc.pressDigitKey(0);
calc.pressEqualsKey();
// calc.pressEqualsKey();

String expected = "40";
String expected = "Error";
String actual = calc.readScreen();

assertEquals(expected, actual);
}

@Test
@DisplayName("should display result after getting the square root of two")
void testSquareRoot() {
@DisplayName("should display the result of a multiple addition of three positive single digit numbers")

void testMultipleAddition() {

Calculator calc = new Calculator();

calc.pressDigitKey(2);
calc.pressUnaryOperationKey("√");
calc.pressBinaryOperationKey("+");
calc.pressDigitKey(3);
calc.pressBinaryOperationKey("+");
calc.pressDigitKey(5);
// calc.pressEqualsKey(); //wir brauchen pressEqualskey() in pressDigit() - falls (latest value != "") pressEqualsKey

String expected = "1.41421356";
String expected = "10";
String actual = calc.readScreen();

assertEquals(expected, actual);

}

//TODO hier weitere Tests erstellen
Expand Down