summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/in
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2014-12-17 14:36:31 +0100
committerStefan Suhren <suhren.stefan@fh-swf.de>2014-12-17 14:36:31 +0100
commit31dd51362d8b524c2a9aaab646f0fa38ae457815 (patch)
tree5af91ccfe491c962c49db8a49c3448818b3f5928 /src/de/fhswf/in
parent1a5f21d376fc05745410124a9ea717fb9dd0b10f (diff)
downloadJava1-31dd51362d8b524c2a9aaab646f0fa38ae457815.tar.gz
Java1-31dd51362d8b524c2a9aaab646f0fa38ae457815.zip
Assignment No.11 after correction
Diffstat (limited to 'src/de/fhswf/in')
-rw-r--r--src/de/fhswf/in/inf/java1/aufgabe11/UPN.java112
-rw-r--r--src/de/fhswf/in/inf/java1/aufgabe11/UpnMain.java6
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());
}