diff --git a/.gitignore b/.gitignore index 9086755..4407014 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ vpl/ *~ \#*# +# javac stuff +*.class + # javadoc stuff *.html *.js diff --git a/tut9/src/FunctionalSet.java b/tut9/src/FunctionalSet.java index b635fc9..73101c2 100644 --- a/tut9/src/FunctionalSet.java +++ b/tut9/src/FunctionalSet.java @@ -239,4 +239,16 @@ public class FunctionalSet implements Set return res; } + public E min(Comparator comp) + { + E min = null; + for (E elem : this) + { + if (min == null || comp.compare(min, elem) > 0) // min > elem + min = elem; + } + if (min == null) + throw new MinimumOfEmptySetException(); + return min; + } } diff --git a/tut9/src/FunctionalSetIterator.java b/tut9/src/FunctionalSetIterator.java new file mode 100644 index 0000000..ef411e6 --- /dev/null +++ b/tut9/src/FunctionalSetIterator.java @@ -0,0 +1,67 @@ +import java.util.*; + +public class FunctionalSetIterator implements Iterator +{ + /** Unsere Menge */ + private FunctionalSet set; + /** Aktuelles Element */ + private SimpleFunctionalSet current; + /** Bereits gesehene Elemente */ + private Set seen = new FunctionalSet<>(); + /** Aktuelles Element */ + private E currentElem; + /** Ob das aktuelle Element bereits entfernt wurde. */ + private boolean hasBeenRemoved = true; + + private void skipToNext() + { + while (true) + { + current = current.getRemainingSet(); + if (current instanceof RemoveSet) + seen.add(((RemoveSet) current).getObject()); + else if (!(current instanceof AddSet) || !seen.contains(((AddSet)current).getElement())) + break; + } + } + + public FunctionalSetIterator(FunctionalSet set, SimpleFunctionalSet head) + { + this.set = set; + current = head; + if (current instanceof RemoveSet) + { + seen.add(((RemoveSet)current).getObject()); + skipToNext(); + } + } + + @Override + public boolean hasNext() + { + return !(current instanceof EmptySet); + } + + @Override + public E next() + { + if (!hasNext()) + throw new NoSuchElementException(); + + currentElem = ((AddSet) current).getElement(); + seen.add(currentElem); + skipToNext(); + hasBeenRemoved = false; + return currentElem; + } + + @Override + public void remove() + { + if (hasBeenRemoved) + throw new IllegalStateException("Das Element wurde schon entfernt"); + + set.remove(currentElem); + hasBeenRemoved = true; + } +} diff --git a/tut9/src/Main.java b/tut9/src/Main.java index f20acd6..c994516 100644 --- a/tut9/src/Main.java +++ b/tut9/src/Main.java @@ -15,15 +15,36 @@ public class Main case "exit": break; case "add": - s.add(Integer.parseInt(words[1])); - System.out.println(s); + try + { + s.add(Integer.parseInt(words[1])); + System.out.println(s); + } + catch (NumberFormatException nfe) + { + System.out.println("FEHLER: Eingabe ungültig!"); + } break; case "remove": - s.remove(Integer.parseInt(words[1])); - System.out.println(s); + try + { + s.remove(Integer.parseInt(words[1])); + System.out.println(s); + } + catch (NumberFormatException nfe) + { + System.out.println("FEHLER: Eingabe ungültig!"); + } break; case "min": - System.out.println(s.min(Comparator.naturalOrder())); + try + { + System.out.println(s.min(Comparator.naturalOrder())); + } + catch (MinimumOfEmptySetException moese) + { + System.out.println("FEHLER: Set enthaelt keine Elemente"); + } break; default: System.out.println("Unknown command."); diff --git a/tut9/src/MinimumOfEmptySetException.java b/tut9/src/MinimumOfEmptySetException.java new file mode 100644 index 0000000..3e52b8b --- /dev/null +++ b/tut9/src/MinimumOfEmptySetException.java @@ -0,0 +1,4 @@ +public class MinimumOfEmptySetException extends RuntimeException +{ + +}