summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/in/inf/java1/aufgabe08
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2014-12-07 19:15:58 +0100
committerStefan Suhren <suhren.stefan@fh-swf.de>2014-12-07 19:18:03 +0100
commit9acea903216dbe371dd7b41cbf23b46a5732bcb4 (patch)
tree5a61491ad22e470db8151d2e07f163b011c72d6e /src/de/fhswf/in/inf/java1/aufgabe08
parent8a53a8fca255e4a84ca0e35dac925a223738b98a (diff)
downloadJava1-9acea903216dbe371dd7b41cbf23b46a5732bcb4.tar.gz
Java1-9acea903216dbe371dd7b41cbf23b46a5732bcb4.zip
Refactored the packagenames fo better sorting
Diffstat (limited to 'src/de/fhswf/in/inf/java1/aufgabe08')
-rw-r--r--src/de/fhswf/in/inf/java1/aufgabe08/FloydAndBentley.java130
-rw-r--r--src/de/fhswf/in/inf/java1/aufgabe08/Lottery6OutOf49.java81
-rw-r--r--src/de/fhswf/in/inf/java1/aufgabe08/LottoZiehungMain.java45
3 files changed, 256 insertions, 0 deletions
diff --git a/src/de/fhswf/in/inf/java1/aufgabe08/FloydAndBentley.java b/src/de/fhswf/in/inf/java1/aufgabe08/FloydAndBentley.java
new file mode 100644
index 0000000..8ba0a7a
--- /dev/null
+++ b/src/de/fhswf/in/inf/java1/aufgabe08/FloydAndBentley.java
@@ -0,0 +1,130 @@
+/**
+ *
+ */
+package de.fhswf.in.inf.java1.aufgabe08;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Utility class for the Floyd and Bentley algorithm.
+ *
+ * @author $Author: $
+ * @version $Revision: $, $Date: $ UTC
+ */
+public final class FloydAndBentley
+{
+
+ private static Random rnd = new Random();
+
+ /**
+ * Private constructor for utility class.
+ *
+ */
+ private FloydAndBentley()
+ {
+ }
+
+ /**
+ * A function which chooses a sample from a List with the Floyd and Bentley
+ * algorithm. (Recursive algorithm)
+ *
+ * @param <T>
+ * Type of the Lists.
+ * @param s
+ * The set from which the sample is chosen.
+ * @param k
+ * The number of items to be chosen.
+ * @return Return the sample.
+ */
+ public static <T> List<T> sample(List<T> s, int k)
+ {
+ if (s.isEmpty())
+ {
+ throw new IllegalArgumentException("Set is empty");
+ }
+ if (k > s.size())
+ {
+ throw new IllegalArgumentException("k is bigger than the Set");
+ }
+
+ List<T> ret = new ArrayList<>(k);
+ sampleRec(s, k, ret);
+
+ return ret;
+
+ }
+
+ /**
+ * The recursive implementation of the Floyd and Bentley algorithm.
+ *
+ * @param <T>
+ * Type of the Lists.
+ * @param s
+ * The set from which the sample is chosen.
+ * @param k
+ * The number of items to be chosen.
+ * @param ret
+ * Return the sample.
+ */
+ private static <T> void sampleRec(List<T> s, int k, List<T> ret)
+ {
+ if (ret.size() >= k)
+ {
+ return;
+ }
+
+ T val = s.get(rnd.nextInt(s.size() - (k - ret.size() - 1)));
+
+ if (ret.contains(val))
+ {
+ val = s.get(s.size() - (k - ret.size() - 1));
+ }
+
+ ret.add(val);
+
+ sampleRec(s, k, ret);
+
+ }
+
+ /**
+ * A function which chooses a sample from a List with the Floyd and Bentley
+ * algorithm. (Non recursive algorithm)
+ *
+ * @param <T>
+ * Type of the Lists.
+ * @param s
+ * The set from which the sample is chosen.
+ * @param k
+ * The number of items to be chosen.
+ * @return Return the sample.
+ */
+ public static <T> List<T> sample2(List<T> s, int k)
+ {
+ if (s.isEmpty())
+ {
+ throw new IllegalArgumentException("Set is empty");
+ }
+ if (k > s.size())
+ {
+ throw new IllegalArgumentException("k is bigger than the Set");
+ }
+
+ List<T> ret = new ArrayList<>(k);
+
+ for (int i = 0; i < k; i++)
+ {
+ T val = s.get(rnd.nextInt(s.size() - (k - ret.size() - 1)));
+
+ if (ret.contains(val))
+ {
+ val = s.get(s.size() - (k - ret.size() - 1));
+ }
+
+ ret.add(val);
+ }
+
+ return ret;
+ }
+}
diff --git a/src/de/fhswf/in/inf/java1/aufgabe08/Lottery6OutOf49.java b/src/de/fhswf/in/inf/java1/aufgabe08/Lottery6OutOf49.java
new file mode 100644
index 0000000..b7c43f1
--- /dev/null
+++ b/src/de/fhswf/in/inf/java1/aufgabe08/Lottery6OutOf49.java
@@ -0,0 +1,81 @@
+/**
+ *
+ */
+package de.fhswf.in.inf.java1.aufgabe08;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * A class, that simulates a 6 out of 49 Lottery.
+ *
+ * @author $Author: $
+ * @version $Revision: $, $Date: $ UTC
+ */
+public class Lottery6OutOf49
+{
+
+ private static final int MAX_NUMBER = 49;
+
+ private ArrayList<Integer> lotteryNumbers;
+
+ private List<Integer> lastDraw;
+
+ private Integer superzahl;
+
+ /**
+ * Creates a new valid object, that also starts the first draw.
+ *
+ */
+ public Lottery6OutOf49()
+ {
+ lotteryNumbers = new ArrayList<Integer>(MAX_NUMBER);
+
+ for (int i = 1; i <= MAX_NUMBER; i++)
+ {
+ lotteryNumbers.add(i);
+ }
+ }
+
+ /**
+ * Does the next draw.
+ *
+ */
+ public void nextDraw()
+ {
+ lastDraw = FloydAndBentley.sample(lotteryNumbers, 7);
+
+ superzahl = lastDraw.remove(lastDraw.size() - 1);
+ lastDraw.sort(null);
+ }
+
+ /**
+ * Returns the last draw.
+ *
+ * @return Returns an immutable list of the last draw.
+ */
+ public List<Integer> getLastDraw()
+ {
+ if (lastDraw == null)
+ {
+ throw new IllegalStateException("First needs a draw.");
+ }
+ return Collections.unmodifiableList(lastDraw);
+ }
+
+ /**
+ * Returns the super number.
+ *
+ * @return The super number of the last draw.
+ */
+ public Integer getSuperzahl()
+ {
+ if (superzahl == null)
+ {
+ throw new IllegalStateException("First needs a sraw.");
+ }
+ return new Integer(superzahl);
+ }
+
+}
diff --git a/src/de/fhswf/in/inf/java1/aufgabe08/LottoZiehungMain.java b/src/de/fhswf/in/inf/java1/aufgabe08/LottoZiehungMain.java
new file mode 100644
index 0000000..32cb841
--- /dev/null
+++ b/src/de/fhswf/in/inf/java1/aufgabe08/LottoZiehungMain.java
@@ -0,0 +1,45 @@
+/**
+ *
+ */
+package de.fhswf.in.inf.java1.aufgabe08;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Main class for the LottoZiehung.
+ *
+ * @author $Author: $
+ * @version $Revision: $, $Date: $ UTC
+ */
+public final class LottoZiehungMain
+{
+
+ /**
+ * Private constructor for utility class.
+ *
+ */
+ private LottoZiehungMain()
+ {
+ }
+
+ /**
+ * Main function of the package.
+ *
+ * @param args
+ * Command line arguments.
+ */
+ public static void main(String[] args)
+ {
+ List<Integer> l = new ArrayList<Integer>();
+ l.add(1);
+ System.out.println(FloydAndBentley.sample(l, 1).size());
+ System.out.println(FloydAndBentley.sample2(l, 1).size());
+
+ Lottery6OutOf49 spiel = new Lottery6OutOf49();
+ spiel.nextDraw();
+ List<Integer> ziehung = spiel.getLastDraw();
+ Integer sonderzahl = spiel.getSuperzahl();
+ System.out.println(ziehung + " SonderZahl: " + sonderzahl);
+ }
+}