extend LinkedList für Matrosenkiller ;-)

Status
Nicht offen für weitere Antworten.

guni

Bekanntes Mitglied
Hallo,

vielleicht kennt ihr die Aufgabe:
wir stellen eine beliebige Matrosenanzahl m im Kreis auf und definieren eine Schrittweite n.
vom ersten Matrosen wegzählend lassen wir jeden n-ten Matrosen über Bord springen und wiederholen das Ganze so lange, bis nur mehr ein Matrose überbleibt.
Wenn die Anzahl der Matrosen kleiner der Schrittweite n ist, so wird nach dem ersten Durchgang durch den Kreis einfach weitergezählt.

Falls es wen interessiert, der kann es gern nachprogrammieren. Und nein - ich brauch das nicht für Schule oder Uni - das ist nur interessensmäßig.

Na ja - meine Frage ist eigentlich eh Problemunabhängig:

die Matrosen will ich in einer LinkedList speichern.
jetzt will ich noch meinen Iterator überschreiben und einen CircularIterator erstellen.
Seine Methoden müssen wie folgt überschrieben werden:

next() - wenn (ende_der_Linked_List_erreicht) dann next = first
hasNext() - false wenn listsize = 1

meine Frage ist:
wenn ich den Iterator extende, wie sag ich dann in der next(), dass das nächste Element einer LinkedList gewählt werden soll. Der Iterator ist doch eigentlich unabhängig von dem Objekt, dass er durchläuft, oder? woher weiß er denn, dass er eine LinkedList durchlaufen soll?!

lg, guni
 

0x7F800000

Top Contributor
wenn ich den Iterator extende, wie sag ich dann in der next(), dass das nächste Element einer LinkedList gewählt werden soll. Der Iterator ist doch eigentlich unabhängig von dem Objekt, dass er durchläuft, oder? woher weiß er denn, dass er eine LinkedList durchlaufen soll?!
Iteratoren sind afaik als innere member-klassen definiert, und werden in den collections bei der Nachfrage mit .iterator() erzeugt, sie haben zugriff auf praktisch alle "innereien" d.h. member-avriablen der jeweiligen collection.
extenden? Wäre imho eher problematisch, wer soll denn so einen Iterator dann instantiieren? LinkedList lässt sich dazu nicht direkt überreden, dann müsstest du die auch noch überschreiben.
Wrappen erscheint mir da schon einfacher.

Auf die aufgabe bezogen: wäre ein boolean array da nicht irgendwie billiger? :)
 

guni

Bekanntes Mitglied
Auf die aufgabe bezogen: wäre ein boolean array da nicht irgendwie billiger? :)

ja. billiger wärs schon, aber nicht so schön, oder?
wenn ich eine List mit einem CircledIterator durchlaufe und dann einfach solange entferne bis nur mehr ein Element überbleibt, dann ist mein Algorithmus viel näher am "echten Leben" / eigentlich am "echten Sterben" der Matrosen dran ;-)

mich hätten ja weniger ein komplexe Algorithmen sondern mehr die Möglichkeiten von Java interessiert!
 

0x7F800000

Top Contributor
mich hätten ja weniger ein komplexe Algorithmen sondern mehr die Möglichkeiten von Java interessiert!
nunja, hier wirft Java einem zum Glück keinerlei unnötige Stolpersteine unter die Füße:
[highlight=Java]
import java.util.*;

class _{

public static <T> Iterator<T> createCircularIterator(final Collection<T> c){
return new Iterator<T>(){
private Collection<T> collection;
private Iterator<T> wrappedIterator;
{
collection=c;
wrappedIterator=collection.iterator();
}
@Override
public boolean hasNext() {
return collection.size()>0;
}
@Override
public T next() {
if(!wrappedIterator.hasNext()){
wrappedIterator=collection.iterator();
}
return wrappedIterator.next();
}
@Override
public void remove() {
wrappedIterator.remove();
}
};
}

public static void main(String[] args){
LinkedList<String> matrosen=new LinkedList<String>();
matrosen.add("Pedro");
matrosen.add("Diogo");
matrosen.add("Antonio");
matrosen.add("Christoph");

int step=3;

System.out.println("Matrosen: "+matrosen+" Schritt:"+step);
for(Iterator<String> it=createCircularIterator(matrosen); it.hasNext(); ){
String name="";
for(int i=0; i<step; i++){
name=it.next();
}
System.out.println(name);
it.remove();
}
}
}
[/highlight]
so akzeptabel?
 

guni

Bekanntes Mitglied
ja. das ist genau was ich meine.
allerdings versteh ich den code leider nur zu 70%.
ach ja: wie kann ich in diesem Forum eigentlich Code als Code kennzeichnen?

lg, guni
 

0x7F800000

Top Contributor
ja. das ist genau was ich meine.
allerdings versteh ich den code leider nur zu 70%.
Stress mit inneren und lokalen Klassen (oder wie sie da alle heißen...)? Ja, kann etwas ungewohnt erscheinen. Ich mag die schreibweise jedenfalls... Oder welche 30% genau sind denn unklar, vielleicht kann ich ja noch was sinnvolles dazu sagen...
ach ja: wie kann ich in diesem Forum eigentlich Code als Code kennzeichnen?
[noparse][HIGHLIGHT=Java][/noparse]/*der code*/[noparse][/HIGHLIGHT][/noparse]
Beim WYSIWYG-editor (im Kontrollzentrum einstellbar (Kontrollzentrum ist oben links verlinkt)) einfach auf die Java-Tasse klicken.
 

guni

Bekanntes Mitglied
[highlight=Java]public static <T> Iterator<T> createCircularIterator(final Collection<T> c){[/highlight]
- eine Factory-Methode, oder?!
- aber wieso steht hier 2 mal <T>???

[highlight=Java]return new Iterator<T>(){[/highlight]
- eine anonyme Klasse, oder?!

... dann wären das hier
[highlight=Java]private Collection<T> collection;
private Iterator<T> wrappedIterator;
[/highlight]

die Attribute ...

... und das hier ...
[highlight=Java]
{
collection=c;
wrappedIterator=collection.iterator();

}
[/highlight]
... der Konstruktor, oder?
... ich habe diese Schreibweise eines Konstruktors noch nie gesehen!
... wieso kennt dieser Codeblock meine Variable c??

... ja. soweit mein unverständnis. der rest is eigentlich eh klar.
ach ja - und gibt es vielleicht eine schönere Möglichkeit als 2 Schleifen ineinander?
ich hätte das Ganze so, dass der Kreis immer um step "weitergedreht wird", bis und nach jedem mal drehen dann einfach der erste springt (stellen wir uns vor, die Matrosen stehen im Kreis und drehen sich solang, bis der nächstgereihte wieder am sprungbrett ins meer steht ;-)

lg, guni

 

0x7F800000

Top Contributor
- eine Factory-Methode, oder?!

hmm, jain... Diese Methode construiert und gibt zwar irgendein Objekt zurück, aber ich wüsste nicht, wieso man das als "factory methode" bezeichnen sollte. Factory-Pattern ist was größeres, da gehören mehrere Interfaces und mehrere Klassen dazu, daher stiftet imho der Begriff
"factory methode" in diesem Zusammenhang nur verwirrung.
- aber wieso steht hier 2 mal <T>

3 Mal...
Das erste <T> gibt an, dass die methode generisch ist, hier kommen normalerweise einschränkungen an T rein (in diesem Fall gibt es keine)
Das zweite <T> hängt am Rückgabetyp (könnte ja auch ein Iterator<List<T>> sein oder sonstwas)
Das dritte <T> gibt den Typ des Argumenten an, klar...


- eine anonyme Klasse, oder?!
So nennt man die Dinger glaube ich, ja.

... dann wären das hier [..] die Attribute ...
... und das hier [..] der Konstruktor, oder?
Ja, im wesentlichen richtig. Um das etwas feiner zu differenzieren nennt man das Ding "Exemplarinitialisierer" Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.6 Klassen- und Objektinitialisierung
... ich habe diese Schreibweise eines Konstruktors noch nie gesehen!
Jetzt hast du sie gesehen, war doch nicht so schlimm, oder? ;)
Habe diese schreibweise eigentlich auch relativ vor kurzem entdeckt, seitdem benutze ich anonyme innere klassen wesentlich lieber :D
... wieso kennt dieser Codeblock meine Variable c??
bemerke dass c als final deklariert ist. Auf final-variablen darf ich in solchen anonymen inneren klassen zugreifen. Wieso das so sein muss... ähm... es muss wohl irgendwas damit zu tun haben, wie eine solche klasse beim kompiliervorgang herausgetrennt und als normale klasse umgeschrieben wird. Was da der compiler genau macht weiß ich nicht, aber um das tun zu dürfen benötigt er jedenfalls "final". Öhm, ja... :oops:
ach ja - und gibt es vielleicht eine schönere Möglichkeit als 2 Schleifen ineinander?
ich hätte das Ganze so, dass der Kreis immer um step "weitergedreht wird", bis und nach jedem mal drehen dann einfach der erste springt
Genau das tut das programm doch. Weiterdrehen ist die innere schleife, springen ist das "remove", und das ganze wird wiederholt bis alle baden gegangen sind, das ist die äußere schleife.
Wenn du an deinen Iterator so einer art "skip(n)"-methode drankleben willst, dann musst du eine neue nicht anonyme klasse anlegen, weil die anonyme klassen das interface nach außen nicht verändern können, d.h. sie können keine zusätzliche öffentliche methoden zur verfügung stellen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S How to add job-status(bubbles) to a new column? (Extend Jenkins) Allgemeine Java-Themen 3
M Laufzeit LinkedList Allgemeine Java-Themen 9
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
M Delete bei sortierter LinkedList Allgemeine Java-Themen 5
M ArrayList oder LinkedList Allgemeine Java-Themen 10
M verbesserte Laufzeit bei LinkedList Allgemeine Java-Themen 7
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
K Gespeicherte Daten von einer LinkedList auf vier LinkedList verteilen Allgemeine Java-Themen 6
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
S LinkedList Error Allgemeine Java-Themen 4
T Menge an Elementen aus einer LinkedList Allgemeine Java-Themen 6
L Java Slick2D stürzt ab- Zu viel auf einmal? (LinkedList) Allgemeine Java-Themen 7
F LinkedList Allgemeine Java-Themen 3
S Wertepaar in LinkedList/PriorityQueue speichern Allgemeine Java-Themen 3
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
R LinkedList und Threads - welche Methode ist besser? Allgemeine Java-Themen 2
E Threads linkedlist/multi-thread problem Allgemeine Java-Themen 3
H LinkedList<LinkedList<String>> nach ArrayList<ArrayList<String>> ? Allgemeine Java-Themen 9
C Threads Zwei Threads greifen auf LinkedList zu. Allgemeine Java-Themen 12
B Datentypen JMF: Player LinkedList sinnvoll? ca 30 kurze Sounddateien Allgemeine Java-Themen 3
C LinkedList und ArrayList in HashMap Allgemeine Java-Themen 4
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
C Wie kann ich ein LinkedList verbinden ? Allgemeine Java-Themen 4
R Intervall-Implementierung mit selbstgebauter LinkedList Allgemeine Java-Themen 7
A LinkedList Auslesen und Objekt Löschen Allgemeine Java-Themen 4
nabla LinkedList removeRange ineffizient? Allgemeine Java-Themen 4
R ArrayList, LinkedList oder Set Allgemeine Java-Themen 9
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
T Problem mit LinkedList Allgemeine Java-Themen 2
D indexOutOfBoundsException bei LinkedList Allgemeine Java-Themen 10
T zirkuläre LinkedList Allgemeine Java-Themen 8
Caracasa [Threads] Gleichzeitiger Zugriff auf eine LinkedList Allgemeine Java-Themen 9
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
N ArrayList oder LinkedList? Allgemeine Java-Themen 15
M Rekursive Ausgabe einer linkedList Allgemeine Java-Themen 8
J LinkedList und Assoziaziotenen Allgemeine Java-Themen 8
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
C LinkedList Fragen Allgemeine Java-Themen 7
H Daten aus LinkedList ausgeben ! Allgemeine Java-Themen 9
H [LinkedList] Sortieren durch MergeSort Allgemeine Java-Themen 3
S Probleme mit LinkedList und Label mit gridbagLayout Allgemeine Java-Themen 2
M IOException bei save und load in LinkedList Allgemeine Java-Themen 4
N Objekte in LinkedList "umsortieren" Allgemeine Java-Themen 4
C LinkedList Exception abfangen Allgemeine Java-Themen 8
Z LinkedList speichern Allgemeine Java-Themen 2
N Element aus LinkedList löschen Allgemeine Java-Themen 2
Z löschen aus Linkedlist Allgemeine Java-Themen 12
G LinkedList sortieren Allgemeine Java-Themen 3
C Collection, LinkedList, Elemente Allgemeine Java-Themen 4
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 61
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben