diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2014-12-07 19:15:58 +0100 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2014-12-07 19:18:03 +0100 |
| commit | 9acea903216dbe371dd7b41cbf23b46a5732bcb4 (patch) | |
| tree | 5a61491ad22e470db8151d2e07f163b011c72d6e /src/de/fhswf/in/inf/java1/aufgabe08 | |
| parent | 8a53a8fca255e4a84ca0e35dac925a223738b98a (diff) | |
| download | Java1-9acea903216dbe371dd7b41cbf23b46a5732bcb4.tar.gz Java1-9acea903216dbe371dd7b41cbf23b46a5732bcb4.zip | |
Refactored the packagenames fo better sorting
Diffstat (limited to 'src/de/fhswf/in/inf/java1/aufgabe08')
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); + } +} |
