Guten Tag, ich habe ein kleines Java Programm über das Josephs Problem. Ich habe 7 Personen und eine Schrittweite von 2, so dass am Ende die 7te Person überlebt. Ich habe eine Klasse Person wo ich die Anzahl der Personen als Name Speicher und als Zirkel wiedergeben kann bspw: (1,2,3,4,5,6,7). In meinem Code habe ich nur zwei Zeilen das mich etwas verwirrt das wäre die Zeile 21( iter = getNewIterator(iter, list1); ) und 30 ( iter = getNewIterator(iter, list1); ) wieso muss ich diese Methode getNewIterator aufrufen und wieso muss ich da jedes mal den iterator und die Liste mitgeben? Und wenn ich in der Methode getNewIterator:
if (!iter.hasNext()) {
return iter = list1.iterator();
}
diesen Teil realisiere, beginnt dann die Liste einfach von vorne zu iterieren falls ich das richtig verstanden habe? Danke schon mal wen mir jemand meine Verwirrung auflösen kann!
if (!iter.hasNext()) {
return iter = list1.iterator();
}
diesen Teil realisiere, beginnt dann die Liste einfach von vorne zu iterieren falls ich das richtig verstanden habe? Danke schon mal wen mir jemand meine Verwirrung auflösen kann!
Java:
import java.util.Iterator;
import java.util.LinkedList;
public class Josephus {
public Josephus(int size, int step) {
LinkedList<Person> list1 = new LinkedList<Person>();
for (int i = 1; i <= size; i++) {
list1.add(new Person("" + i));
}
Iterator<Person> iter = list1.iterator();
while (list1.size() > 1) {
for (int j = 1; j < step; j++) {
iter.next();
iter = getNewIterator(iter, list1);
}
Person person = iter.next(); //speicher die zweite Person hier
System.out.println("Circle: " + list1);
System.out.println("Leaving: " + person.getName());
iter.remove(); //löscht das Elemnt was von next geholt wurde, in dem Fall die zweite Person
iter = getNewIterator(iter, list1);
}
System.out.println(list1.getFirst().getName());
}
private Iterator<Person> getNewIterator(Iterator<Person> iter, LinkedList<Person> list1) {
if (!iter.hasNext()) {
return iter = list1.iterator();
}
return iter;
}
}