From 692d51e286a72aee300e3c4e4bdafab77f2b4f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Th=C3=BCm?= Date: Sun, 13 Dec 2020 00:33:06 +0100 Subject: [PATCH 1/8] feat: Add multiplication and its generalization called expression Resolves #1 --- .../de/uulm/sp/swt/profcalculator/Add.java | 10 +++------ .../sp/swt/profcalculator/Expression.java | 15 +++++++++++++ .../sp/swt/profcalculator/Multiplication.java | 18 ++++++++++++++++ .../sp/swt/profcalculator/ProfCalculator.java | 21 ++++++++++++------- 4 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java index d557740..fca66f5 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java @@ -1,9 +1,8 @@ package de.uulm.sp.swt.profcalculator; -public class Add { +// TODO rename class Add into Addition +public class Add extends Expression { - public Value l, r; - public Add(Value l, Value r) { this.l = l; this.r = r; @@ -16,8 +15,5 @@ public String toString() { public int evaluate() { return l.getValue() + r.getValue(); } - - public String computeEquation() { - return toString() + " = " + evaluate(); - } + } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java new file mode 100644 index 0000000..0075ceb --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java @@ -0,0 +1,15 @@ +package de.uulm.sp.swt.profcalculator; + +public abstract class Expression { + + // TODO rename l and r to left and right + public Value l; + public Value r; + + public abstract int evaluate(); + + public String computeEquation() { + return toString() + " = " + evaluate(); + } + +} \ No newline at end of file diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java new file mode 100644 index 0000000..6fa8cc8 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java @@ -0,0 +1,18 @@ +package de.uulm.sp.swt.profcalculator; + +public class Multiplication extends Expression { + + public Multiplication(Value l, Value r) { + this.l = l; + this.r = r; + } + + public String toString() { + return l.toString() + " * " + r.toString(); + } + + public int evaluate() { + return l.getValue() * r.getValue(); + } + +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 0e2930e..e73ad8f 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -16,13 +16,14 @@ public class ProfCalculator extends Application implements EventHandler Date: Sun, 13 Dec 2020 00:37:49 +0100 Subject: [PATCH 2/8] refactor: Rename class Add and its fields --- .../de/uulm/sp/swt/profcalculator/Add.java | 19 ------------------- .../uulm/sp/swt/profcalculator/Addition.java | 18 ++++++++++++++++++ .../sp/swt/profcalculator/Expression.java | 5 ++--- .../sp/swt/profcalculator/Multiplication.java | 10 +++++----- .../sp/swt/profcalculator/ProfCalculator.java | 4 ++-- 5 files changed, 27 insertions(+), 29 deletions(-) delete mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java deleted file mode 100644 index fca66f5..0000000 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.uulm.sp.swt.profcalculator; - -// TODO rename class Add into Addition -public class Add extends Expression { - - public Add(Value l, Value r) { - this.l = l; - this.r = r; - } - - public String toString() { - return l.toString() + " + " + r.toString(); - } - - public int evaluate() { - return l.getValue() + r.getValue(); - } - -} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java new file mode 100644 index 0000000..f7c3840 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java @@ -0,0 +1,18 @@ +package de.uulm.sp.swt.profcalculator; + +public class Addition extends Expression { + + public Addition(Value left, Value right) { + this.left = left; + this.right = right; + } + + public String toString() { + return left.toString() + " + " + right.toString(); + } + + public int evaluate() { + return left.getValue() + right.getValue(); + } + +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java index 0075ceb..8dba35d 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java @@ -2,9 +2,8 @@ public abstract class Expression { - // TODO rename l and r to left and right - public Value l; - public Value r; + public Value left; + public Value right; public abstract int evaluate(); diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java index 6fa8cc8..e56f4a3 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java @@ -2,17 +2,17 @@ public class Multiplication extends Expression { - public Multiplication(Value l, Value r) { - this.l = l; - this.r = r; + public Multiplication(Value left, Value right) { + this.left = left; + this.right = right; } public String toString() { - return l.toString() + " * " + r.toString(); + return left.toString() + " * " + right.toString(); } public int evaluate() { - return l.getValue() * r.getValue(); + return left.getValue() * right.getValue(); } } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index e73ad8f..d6a3151 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -16,7 +16,7 @@ public class ProfCalculator extends Application implements EventHandler Date: Wed, 16 Dec 2020 18:39:50 +0100 Subject: [PATCH 3/8] refactor: Push down fields from class Expression --- ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java | 3 +++ .../src/de/uulm/sp/swt/profcalculator/Expression.java | 3 --- .../src/de/uulm/sp/swt/profcalculator/Multiplication.java | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java index f7c3840..298a3b3 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java @@ -2,6 +2,9 @@ public class Addition extends Expression { + public Value left; + public Value right; + public Addition(Value left, Value right) { this.left = left; this.right = right; diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java index 8dba35d..f0e4d17 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java @@ -2,9 +2,6 @@ public abstract class Expression { - public Value left; - public Value right; - public abstract int evaluate(); public String computeEquation() { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java index e56f4a3..b7b896b 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java @@ -2,6 +2,9 @@ public class Multiplication extends Expression { + public Value left; + public Value right; + public Multiplication(Value left, Value right) { this.left = left; this.right = right; From 63d059b7c6d3f8f6dd6a3dfba116a6ce64ee0111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Th=C3=BCm?= Date: Wed, 16 Dec 2020 18:45:35 +0100 Subject: [PATCH 4/8] feat: Show complete computation as formula --- .../src/de/uulm/sp/swt/profcalculator/Addition.java | 8 ++++---- .../src/de/uulm/sp/swt/profcalculator/Multiplication.java | 8 ++++---- .../src/de/uulm/sp/swt/profcalculator/ProfCalculator.java | 7 +++---- .../src/de/uulm/sp/swt/profcalculator/Value.java | 6 ++++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java index 298a3b3..a994ff0 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java @@ -2,10 +2,10 @@ public class Addition extends Expression { - public Value left; - public Value right; + public Expression left; + public Expression right; - public Addition(Value left, Value right) { + public Addition(Expression left, Expression right) { this.left = left; this.right = right; } @@ -15,7 +15,7 @@ public String toString() { } public int evaluate() { - return left.getValue() + right.getValue(); + return left.evaluate() + right.evaluate(); } } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java index b7b896b..758447d 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java @@ -2,10 +2,10 @@ public class Multiplication extends Expression { - public Value left; - public Value right; + public Expression left; + public Expression right; - public Multiplication(Value left, Value right) { + public Multiplication(Expression left, Expression right) { this.left = left; this.right = right; } @@ -15,7 +15,7 @@ public String toString() { } public int evaluate() { - return left.getValue() * right.getValue(); + return left.evaluate() * right.evaluate(); } } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index d6a3151..47ee734 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -16,7 +16,7 @@ public class ProfCalculator extends Application implements EventHandler Date: Wed, 16 Dec 2020 18:47:10 +0100 Subject: [PATCH 5/8] refactor: Move classes into a new subpackage for expressions --- .../src/de/uulm/sp/swt/profcalculator/ProfCalculator.java | 4 ++++ .../sp/swt/profcalculator/{ => expressions}/Addition.java | 2 +- .../sp/swt/profcalculator/{ => expressions}/Expression.java | 2 +- .../swt/profcalculator/{ => expressions}/Multiplication.java | 2 +- .../uulm/sp/swt/profcalculator/{ => expressions}/Value.java | 2 +- 5 files changed, 8 insertions(+), 4 deletions(-) rename ProfCalculator/src/de/uulm/sp/swt/profcalculator/{ => expressions}/Addition.java (87%) rename ProfCalculator/src/de/uulm/sp/swt/profcalculator/{ => expressions}/Expression.java (75%) rename ProfCalculator/src/de/uulm/sp/swt/profcalculator/{ => expressions}/Multiplication.java (87%) rename ProfCalculator/src/de/uulm/sp/swt/profcalculator/{ => expressions}/Value.java (82%) diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 47ee734..0bda3d8 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -1,5 +1,9 @@ package de.uulm.sp.swt.profcalculator; +import de.uulm.sp.swt.profcalculator.expressions.Addition; +import de.uulm.sp.swt.profcalculator.expressions.Expression; +import de.uulm.sp.swt.profcalculator.expressions.Multiplication; +import de.uulm.sp.swt.profcalculator.expressions.Value; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java similarity index 87% rename from ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java rename to ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java index a994ff0..99a7a8a 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java @@ -1,4 +1,4 @@ -package de.uulm.sp.swt.profcalculator; +package de.uulm.sp.swt.profcalculator.expressions; public class Addition extends Expression { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java similarity index 75% rename from ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java rename to ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java index f0e4d17..c2624ac 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java @@ -1,4 +1,4 @@ -package de.uulm.sp.swt.profcalculator; +package de.uulm.sp.swt.profcalculator.expressions; public abstract class Expression { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java similarity index 87% rename from ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java rename to ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java index 758447d..c1f3e2d 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java @@ -1,4 +1,4 @@ -package de.uulm.sp.swt.profcalculator; +package de.uulm.sp.swt.profcalculator.expressions; public class Multiplication extends Expression { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Value.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java similarity index 82% rename from ProfCalculator/src/de/uulm/sp/swt/profcalculator/Value.java rename to ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java index dc30780..41c5a07 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Value.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java @@ -1,4 +1,4 @@ -package de.uulm.sp.swt.profcalculator; +package de.uulm.sp.swt.profcalculator.expressions; public class Value extends Expression { From 37d0dac91b2dab40a69d2bc5ce0a8f67d221a070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Th=C3=BCm?= Date: Wed, 16 Dec 2020 19:11:44 +0100 Subject: [PATCH 6/8] feat: Add brackets to expressions when needed --- .../sp/swt/profcalculator/ProfCalculator.java | 2 ++ .../profcalculator/expressions/Addition.java | 4 +-- .../expressions/Expression.java | 6 +++++ .../expressions/Multiplication.java | 4 +-- .../expressions/NecessaryBrackets.java | 25 +++++++++++++++++++ .../swt/profcalculator/expressions/Value.java | 2 +- 6 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/NecessaryBrackets.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 0bda3d8..51994b5 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -3,6 +3,7 @@ import de.uulm.sp.swt.profcalculator.expressions.Addition; import de.uulm.sp.swt.profcalculator.expressions.Expression; import de.uulm.sp.swt.profcalculator.expressions.Multiplication; +import de.uulm.sp.swt.profcalculator.expressions.NecessaryBrackets; import de.uulm.sp.swt.profcalculator.expressions.Value; import javafx.application.Application; import javafx.event.ActionEvent; @@ -57,6 +58,7 @@ public void handle(ActionEvent event) { else if (event.getSource() == multiplicationButton) { expression = new Multiplication(expression, new Value(newValue)); } + expression = new NecessaryBrackets(expression); updateGUI(); inputField.requestFocus(); } catch (NumberFormatException e) { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java index 99a7a8a..290f903 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java @@ -10,8 +10,8 @@ public Addition(Expression left, Expression right) { this.right = right; } - public String toString() { - return left.toString() + " + " + right.toString(); + public String toString(Expression parent) { + return left.toString(this) + " + " + right.toString(this); } public int evaluate() { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java index c2624ac..2047d49 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java @@ -4,6 +4,12 @@ public abstract class Expression { public abstract int evaluate(); + public abstract String toString(Expression parent); + + public String toString() { + return toString(null); + } + public String computeEquation() { return toString() + " = " + evaluate(); } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java index c1f3e2d..7256be3 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java @@ -10,8 +10,8 @@ public Multiplication(Expression left, Expression right) { this.right = right; } - public String toString() { - return left.toString() + " * " + right.toString(); + public String toString(Expression parent) { + return left.toString(this) + " * " + right.toString(this); } public int evaluate() { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/NecessaryBrackets.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/NecessaryBrackets.java new file mode 100644 index 0000000..177b051 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/NecessaryBrackets.java @@ -0,0 +1,25 @@ +package de.uulm.sp.swt.profcalculator.expressions; + +public class NecessaryBrackets extends Expression { + + private Expression expression; + + public NecessaryBrackets(Expression expression) { + this.expression = expression; + } + + @Override + public String toString(Expression parent) { + String childString = expression.toString(parent); + if (parent instanceof Multiplication && expression instanceof Addition) { + childString = "(" + childString + ")"; + } + return childString; + } + + @Override + public int evaluate() { + return expression.evaluate(); + } + +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java index 41c5a07..c9f9ed6 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java @@ -8,7 +8,7 @@ public Value(int value) { this.value = value; } - public String toString() { + public String toString(Expression parent) { return value.toString(); } From ab3454cdfaf7e1855d5be4fbed9877cc7372f0e5 Mon Sep 17 00:00:00 2001 From: Simon Schall Date: Sat, 17 Jul 2021 20:30:27 +0200 Subject: [PATCH 7/8] add Subtraction to Calculator --- .../sp/swt/profcalculator/ProfCalculator.java | 8 ++++++- .../expressions/NecessaryBrackets.java | 2 +- .../expressions/Subtraction.java | 24 +++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Subtraction.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 51994b5..5d4cca7 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -4,6 +4,7 @@ import de.uulm.sp.swt.profcalculator.expressions.Expression; import de.uulm.sp.swt.profcalculator.expressions.Multiplication; import de.uulm.sp.swt.profcalculator.expressions.NecessaryBrackets; +import de.uulm.sp.swt.profcalculator.expressions.Subtraction; import de.uulm.sp.swt.profcalculator.expressions.Value; import javafx.application.Application; import javafx.event.ActionEvent; @@ -29,6 +30,7 @@ public class ProfCalculator extends Application implements EventHandler Date: Sat, 17 Jul 2021 21:28:16 +0200 Subject: [PATCH 8/8] implement a second mode beside using brackets, user can now also decide to evaluate the expression immediatley --- .../de/uulm/sp/swt/profcalculator/Mode.java | 6 +++ .../sp/swt/profcalculator/ProfCalculator.java | 39 ++++++++++++++++++- .../profcalculator/expressions/Evaluate.java | 25 ++++++++++++ .../expressions/Expression.java | 3 +- 4 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Mode.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Evaluate.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Mode.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Mode.java new file mode 100644 index 0000000..a6f306e --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Mode.java @@ -0,0 +1,6 @@ +package de.uulm.sp.swt.profcalculator; + +public enum Mode { + BRACKET, + EVALUATE +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 5d4cca7..9a315ab 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -1,6 +1,7 @@ package de.uulm.sp.swt.profcalculator; import de.uulm.sp.swt.profcalculator.expressions.Addition; +import de.uulm.sp.swt.profcalculator.expressions.Evaluate; import de.uulm.sp.swt.profcalculator.expressions.Expression; import de.uulm.sp.swt.profcalculator.expressions.Multiplication; import de.uulm.sp.swt.profcalculator.expressions.NecessaryBrackets; @@ -13,12 +14,16 @@ import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.stage.Stage; public class ProfCalculator extends Application implements EventHandler { + + private Mode mode = Mode.BRACKET; private final static Value DEFAULT_VALUE = new Value(0); @@ -31,6 +36,9 @@ public class ProfCalculator extends Application implements EventHandler() { + @Override + public void handle(ActionEvent e) { + mode = Mode.BRACKET; + } + }); + + rbEvaluation.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent e) { + mode = Mode.EVALUATE; + } + }); - VBox layout = new VBox(10, errorLabel, inputField, additionButton, subtractionButton, multiplicationButton, resultLabel); + VBox layout = new VBox(10, errorLabel, inputField, additionButton, subtractionButton, multiplicationButton, resultLabel, rbBracket, rbEvaluation); layout.setPadding(new Insets(20, 80, 20, 80)); Scene scene = new Scene(layout); @@ -64,13 +91,21 @@ else if (event.getSource() == multiplicationButton) { else if (event.getSource() == subtractionButton) { expression = new Subtraction(expression, new Value(newValue)); } - expression = new NecessaryBrackets(expression); + if(mode == Mode.BRACKET) { + expression = new NecessaryBrackets(expression); + } + else { + expression = new Evaluate(expression); + } updateGUI(); inputField.requestFocus(); } catch (NumberFormatException e) { errorLabel.setText("\"" + inputField.getText() + "\" is not a valid integer"); } } + + + private void updateGUI() { resultLabel.setText(expression.computeEquation()); diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Evaluate.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Evaluate.java new file mode 100644 index 0000000..86d9e59 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Evaluate.java @@ -0,0 +1,25 @@ +package de.uulm.sp.swt.profcalculator.expressions; + +public class Evaluate extends Expression { + + private Expression expression; + + public Evaluate(Expression expression) { + this.expression = expression; + } + + @Override + public String toString(Expression parent) { + String childString = expression.toString(parent); + if (parent instanceof Multiplication && (expression instanceof Addition || expression instanceof Subtraction)) { + childString = String.valueOf(evaluate()); + } + return childString; + } + + @Override + public int evaluate() { + return expression.evaluate(); + } + +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java index 2047d49..c7f5402 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java @@ -1,7 +1,8 @@ package de.uulm.sp.swt.profcalculator.expressions; -public abstract class Expression { +public abstract class Expression { + public abstract int evaluate(); public abstract String toString(Expression parent);