diff options
Diffstat (limited to 'src/de/fhswf/in')
| -rw-r--r-- | src/de/fhswf/in/inf/java1/aufgabe11/UPN.java | 112 | ||||
| -rw-r--r-- | src/de/fhswf/in/inf/java1/aufgabe11/UpnMain.java | 6 |
2 files changed, 71 insertions, 47 deletions
diff --git a/src/de/fhswf/in/inf/java1/aufgabe11/UPN.java b/src/de/fhswf/in/inf/java1/aufgabe11/UPN.java index 25b939e..f8938fc 100644 --- a/src/de/fhswf/in/inf/java1/aufgabe11/UPN.java +++ b/src/de/fhswf/in/inf/java1/aufgabe11/UPN.java @@ -43,52 +43,43 @@ public class UPN for (String string : upnString.split("\\s+")) { - try - { - upnStack.add(Double.valueOf(string)); - } - catch (NumberFormatException e) - { - double operand1 = 0; - double operand2 = 0; - if (upnStack.size() < 2) - { - throw new IllegalStateException( - "Two operands are needed for an operation."); - } - operand2 = upnStack.pop(); - operand1 = upnStack.pop(); + Double[] operands = null; - switch (string) - { - case "+": - upnStack.add(operand1 + operand2); - break; - case "-": - upnStack.add(operand1 - operand2); - break; - case "*": - upnStack.add(operand1 * operand2); - break; - case "/": - if (operand2 == 0) - { - throw new IllegalArgumentException("Divisor can't be 0."); - } - upnStack.add(operand1 / operand2); - break; - case "%": - if (operand2 == 0) - { - throw new IllegalArgumentException("Divisor can't be 0."); - } - upnStack.add(operand1 % operand2); - break; - default: + switch (string) + { + case "+": + operands = fetch(); + upnStack.add(operands[0] + operands[1]); + break; + case "-": + operands = fetch(); + upnStack.add(operands[0] - operands[1]); + break; + case "*": + operands = fetch(); + upnStack.add(operands[0] * operands[1]); + break; + case "/": + divisorZero(); + operands = fetch(); + upnStack.add(operands[0] / operands[1]); + break; + case "%": + divisorZero(); + operands = fetch(); + upnStack.add(operands[0] % operands[1]); + break; + default: + try + { + upnStack.add(Double.valueOf(string)); + } + catch (NumberFormatException e) + { throw new IllegalArgumentException("String: \"" + string - + "\" is not a valid operator."); - } + + "\" is not a valid operator nor a valid operand."); + } } } } @@ -102,9 +93,42 @@ public class UPN { if (upnStack.empty()) { - throw new IllegalStateException("UPN stack is empty."); + throw new IllegalArgumentException("UPN stack is empty."); } return upnStack.peek(); } + + /** + * Checks if Divisor will be zero. + * + */ + private void divisorZero() + { + if (upnStack.peek() == 0.0) + { + throw new IllegalArgumentException("Divisor can't be 0."); + } + } + + /** + * Checks if there are two values on the stack and returns them. + * + * @return The two top most doubles from the stack. + */ + private Double[] fetch() + { + if (upnStack.size() < 2) + { + throw new IllegalArgumentException( + "Two operands are needed for an operation."); + } + + Double[] ret = new Double[2]; + + ret[1] = upnStack.pop(); + ret[0] = upnStack.pop(); + + return ret; + } } diff --git a/src/de/fhswf/in/inf/java1/aufgabe11/UpnMain.java b/src/de/fhswf/in/inf/java1/aufgabe11/UpnMain.java index a0f8a00..31ca70d 100644 --- a/src/de/fhswf/in/inf/java1/aufgabe11/UpnMain.java +++ b/src/de/fhswf/in/inf/java1/aufgabe11/UpnMain.java @@ -4,7 +4,7 @@ package de.fhswf.in.inf.java1.aufgabe11; /** - * A class that povides a main. + * A class that provides a main. * * @author $Author: $ * @version $Revision: $, $Date: $ UTC @@ -18,7 +18,6 @@ public final class UpnMain */ private UpnMain() { - // TODO Auto-generated constructor stub } /** @@ -33,7 +32,8 @@ public final class UpnMain UPN test = new UPN(); test.calculate("5 3 - 2 * 10 9 - / 10 6 - 8 6 - 2 * / -"); - + System.out.println(test.getResult()); + test.calculate("5 3 - 2 * 10 9 - / 10 6 - 8 6 - 2 * / -"); System.out.println(test.getResult()); } |
