Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Jesephus-Problem

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Java/JSP
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dr. Trommelfell
Gast





BeitragVerfasst am: 26. Mai 2005 12:06    Titel: Jesephus-Problem Antworten mit Zitat

und zwar hab ich Probleme bei einer Informatikaufgabe von der Uni. Vielleicht hat ja von euch jemand Lust und Zeit mir da ein wenig zu helfen.

Und zwar geht es um die 2. Aufgabe bei der 6. Übung die ihr euch hier runterladen könnt:
http://www.allgemeineinformatik.de/SS2005/uebungen.php

Abgabeschluss ist schon Freitag abend um 24h.

Vielen Dank
Dr. Trommelfell
Nach oben
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 26. Mai 2005 18:50    Titel: Antworten mit Zitat

Dann beschreib doch mal, wo genau jetzt dein Problem liegt...

Welche Teile hast du schon, welche fehlen noch? Verstehst du die Aufgabe prinzipiell oder weißt du überhaupt nicht, was du machen musst? Mit den Angaben, die du hier gemacht hast, könnte man dir zwar die Aufgabe lösen, aber das ist ja auch nicht Sinn der Sache. Du sollst das ja am Ende selber können...

_________________
Genie oder Wahnsinn? Wer kann es wissen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dr. Trommelfell
Gast





BeitragVerfasst am: 27. Mai 2005 07:58    Titel: Antworten mit Zitat

Das Josephus Prob. ist eigentlich nicht so dass Problem. Es geht eher um die Methode remove(). Die Methode insert laäuft, und die Methode Remove läuft für alle Zahlen !=1. Ich komm nur nicht drauf, wie mandas mit der 1 macht.
Nach oben
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 27. Mai 2005 10:07    Titel: Antworten mit Zitat

Wie du ja sicher weißt löscht man in Java n Element aus ner Liste, indem man einfach alle Zeiger auf dieses Element entfernt und dann den Garbage Collector den Rest erledigen lässt.

Wenn nur noch ein Element in dieser Liste ist steht aber die einzige Referenz darauf im Attribut start. Du musst also nur noch start = null setzen und fertig.

_________________
Genie oder Wahnsinn? Wer kann es wissen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dr. Trommelfell
Gast





BeitragVerfasst am: 27. Mai 2005 15:44    Titel: Antworten mit Zitat

Ja, das ist alles klar. aber ich schaffe es nicht, wenn ich z.Bsp. 5 Personen eingefügt hab, die erste zu entfernen.
Mein ansatz wäre:

start=start.next;
Person x = start;
while(x.next!=start){
x=x.next}
x.next=start;

Da ist x das letzte Element, dann wäre x.next, ja das neue start, dass ja start.next. ist.
hab schon alle möglichen kombinationen ausprobiert. aber es läuft net
Nach oben
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 29. Mai 2005 14:12    Titel: Antworten mit Zitat

Wahrscheinlich schon zu spät, aber vielleicht hilfts dir ja auch nachträglich was... Augenzwinkern

Ich seh zumindest mal, was das Problem ist... Nämlich, dass bei dieser zirkulären Liste ja ein Verweis vom letzten auf das erste Element steht, der beim Löschen des ersten Elements ja noch angepasst werden muss.

Erst mal sollte man schauen, was dein Ansatz macht:


Die erste Zeile lässt das Attribut start auf das zweite (und nicht mehr auf das erste) Element der Liste zeigen.
Dann kopierst du die Referenz, die in start steht, in die Variable x, sprich du hast auch in x nen Verweis auf das zweite Element stehen.
Dann startest du eine Schleife, die solange laufen soll bis der Nachfolger von x auf start verweist, sprich x wäre dann das erste Element der Liste (und damit, das, das du löschen willst).
Dann setzt du dessen Nachfolger auf start. Der war es aber vorher schon, also bringt dir das ganze nicht sonderlich viel, gelöscht wird da auf jeden Fall nix...

Das Problem besteht in der Änderung von start gleich am Anfang. Diese Referenz brauchst du, um das letzte Element der Liste zu finden, die darf nicht gleich zu Beginn gelöscht werden. Das Löschen für das erste Element würde also richtig so aussehen:

// Letztes Element suchen
Person lastElem = start;
do {
lastElem = lastElem.next;
} while(lastElem.next != start);
// Anpassen der Referenz auf den Nachfolger des letzten Elements, dieses muss das zweite Element sein
lastElem.next = start.next;
// Anpassen des Attributs start
start = start.next;

Zuerst solltest du allerdings überprüfen, ob die Liste mehr als ein Element hat, ansonsten wird gelöscht, indem start = null gesetzt wird. Dies geht aber ganz einfach über die Zeile

if(start == start.next) start = null;

_________________
Genie oder Wahnsinn? Wer kann es wissen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Java/JSP Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen