Iterator next erstellen

Status
Nicht offen für weitere Antworten.

quodlibet

Mitglied
Hallo zusammen,
ich habe ein Problem bei dem ich zuerst etwas weiter ausholen muss: Ich habe ein gegebenes Problem das aus mehreren Aufgaben mit einer bestimmten Arbeitsdauer und einer bestimmten Anzahl an Prozessoren besteht, die diese Aufgaben lösen sollen. Ich kann nun diese Aufgaben beliebig auf die Prozessoren aufteilen. Also zum Beispiel so: CPU0 : 0 ,4 ,8 = 350
CPU1 : 3 ,9 ,16 ,18 = 999
CPU2 : = 0
CPU3 : 7 ,10 ,13 ,14 = 993
CPU4 : 1 ,17 ,19 = 902
CPU5 : 2 ,11 ,12 = 550
CPU6 : 5 ,6 ,15 = 644
Gesamtlaufzeit: 999
D.h. der Prozessor mit der Nummer 0 bearbeitet die Aufgaben 0, 4 und 8, die zu bearbeiten 350 Zeiteinheiten brauchen. Woher die Zahlen genau eingelesen werden und wie so eine Loesung erstellt wird, das funktioniert schon ganz gut, daher will ich darauf nicht näher eingehen. Es gibt auf jeden Fall eine Klasse Problem und Klasse Loesung.
In der Klasse Loesung soll nun ein Iterator implementiert werden, der durch next() einen Nachbarn dieser Loesung liefert. Ein Nachbar ist dabei eine Loesung bei der einer beliebigen Aufgaben ein anderer beliebiger Prozessor zugeordnet wurde.
Da diese Zuweisung zufällig geschehen muss, ich später allerdings wissen muss ob ich alle Nachbarn durchlaufen habe ist habe ich dieser Klasse Loesung noch ein zweidimensionales Array zugewiesen, das dann so aussieht:
Code:
/**
     * wir speichern die moeglichen Nachbarn in einem zweidimensionalen
     * Array. Jeder dieser Array stellt genau eine neue Zuordnung einer
     * Aufgabe zu einem Prozessor da. <code>int[i][j]</code> wuerde bedeuten, dass
     * der Aufgabe i jetzt der Prozessor j zugewiesen wird
     * Wenn diese Position den Wert 0 speichert bedeutet dies der
     * Nachbar wurde noch nicht besucht. Falls er den Wert 1 speichert
     * ist der schon besucht.
     */
    private int[][] nachbarn;
Dieses Array wird immer wieder wenn eine neue Loesung erstellt wird mit Nullen gefüllt bis auf die Stellen, die bereits durch die Loesung behandelt wurden, dort steht eine Eins.

Mein Iterator sieht jetzt so aus. bearbeitet ist hierbei ein Array das speichert welche Aufgabe durch welchen Prozessor bearbeitet wird. Also bearbeitet[2] = 3; heißt die Aufgabe 2 wird durch den Prozessor 3 bearbeitet. Es gibt auch einen Konstruktor, der dieses bearbeitet gleich festlegt.:
Code:
public Iterator getNachbarn() {
        return new Iterator() {
        	/**
        	 * pruefen ob es eine weitere Loesung gibt
        	 * @return entsprechenden Wahrheitswert
        	 */
            public boolean hasNext() {
                if(getLoesung() != next()) {
        	        return true;
                }else{
                    return false;
                }
            }

            /**
             * macht geht einen Schritt weiter und gibt das neue Ergebnis
             * zurueck
             * @return allerdings wird die Loesung als <code>Object</code>
             *     zurueckgegeben
             */
            public Object next() {
            	Loesung neu = null;
            	
            	/**
            	 * wir durchsuchen nun das Feld und geben 
            	 * das Ergebnis zurueck sobald wir eine Null gefunden haben
            	 */
            	for(int i= 0; i < bearbeitet.length; i++) {
            		for(int j = 0; j < problem.getAnzahlCPUs(); j++) {	
            			/**
            			 * wir haben einen noch nicht besuchten Nachbarn
            			 * gefunden
            			 */
            		    if(nachbarn[i][j] == 0) {
            		    	// diese Loesung wird kopiert
            		    	neu = new Loesung(bearbeitet);
            		    	neu.problem = problem;
            		    	
            		    	// nur mit einem vertauschten Wert
            		    	neu.bearbeitet[i] = j;
            		    	
            		    	// nun ist dieser Nachbar besucht
            		    	nachbarn[i][j] = 1; 
            		    	
            		    	// wir geben diesen Nachbarn zurueck
            		        return neu;
            		    }
            		}
            	}
            	
            	/**
            	 * falls wir keine 0 gefunden haben wird der erste
            	 * Wert von neu zurueckgegeben naemlich null
            	 */
            	return neu;
            }

            /**
             * diese Methode ist nicht funktionsfaehig
             * ist aber noetig um einen Iterator zum implementieren
             */
            public void remove()  {
                throw new UnsupportedOperationException();
            }
        };
    }

Das ist hier noch nicht zufällig. Aber das ist im Moment auch nebensächlich. Das Problem ist nur, dass später wenn ich den Nachbarn vom meiner Loesung lsg aufrufe durch:
Code:
Loesung nachbar = (Loesung) lsg.getNachbarn().next();

Ist jedes Mal nachbar und lsg gleich. Und erst beim nächsten Durchlauf ist dann lsg ein neuer Nachbar. So ist das aber nicht gedacht. Kann mir da irgendjemand helfen.

mfg
quodlibet
 
S

SlaterB

Gast
deine Erklärungen sind in jeder Hinsicht undurchschauber,
was hat eine Lösung mit einer Aufgabe zu tun,
warum sind sie benachbart,
was ist ein 'Durchgang',
was steht zu welchem Zeitpunkt im Array drin,
was soll die Menge aller Nachbarn vor oder nach welchen Durchgang sein?

alles total wirr,

-------
allgemeiner Tipp:
mach dir ein minimales Beispiel bei dem du mehr als ein Element in deinem Iterator erwarstet, z.B. 2 Aufgaben oder 2 Prozessoren oder so,
bau jede Art von Zufall aus, damit du bei jedem Durchgang die gleichen Ergebnisse bekommst,
(oder setze eine vorgegeben Zufallsreihenfolge)

und dann baue überall Ausgaben ein, was du zu welchem Zeitpunkt wo an Werten brauchst,
z.B. zu begin von next() eine Ausgabe des Arrays, falls das hilfreich ist..
 

quodlibet

Mitglied
Naja, stell dir vor du hast mehrer Aufgaben für einen Computer mit mehrern Prozessoren und du sollst jetzt die Aufgaben so verteilen, dass alles in möglichst kurzer Zeit erledigt ist. Das ist ein Problem.
Und eine mögliche Lösung ist jetzt dazu eine oben beschriebene Aufteilung der Aufgaben auf die Prozessoren.

So weit so gut. Zwei Lösungen sind jetzt benachbart, falls sie sich nur in einer Stelle unterscheiden. Also nur eine Aufgabe von einem anderen Prozessor erledigt wird.

Das heißt die Menge aller Nachbarn von einer Lösung sind jetzt alle Lösungen, die sich von der Ausgangslösung nur an einer Stelle im Array bearbeitet unterscheiden. Es gibt zu jeder Lösung genau so viele Nachbarn wie das Produkt der Anzahl der Prozessoren - 1 und der Anzahl der Aufgaben.

Deine Tipps hab ich eigentlich schon beachtet. Ich hab mir alles mögliche anzeigen lassen und hab das ganze von grund auf häufiger durchdacht. Aber trotzdem danke.
 
S

SlaterB

Gast
das klingt nun schon viel logischer,
aber was erwartest du für eine Antwort außer 'ja, sollte eigentlich hinhauen',
ohne kompletten Code kann man den Fehler doch nicht erahnen,

bei so einem Logikproblem gibt es fast keinen Fehler den man nicht mit System.out.println oder einem Debugger lösen kann,

verfolge Schritt für Schritt (anfangs mit größeren Schritten), was dein Programm tut,
und wann es vom vorgegeben Weg abweicht,
reine Fleißaufgabe,
 

quodlibet

Mitglied
Ok danke, schau dir bitte mal das kurz an und sage mir, wo da der Fehler liegt. Das hat nämlich nichts mehr mit Fleißaufgabe zu tun, sondern ich scheine irgendwie daran verrückt zu werden.

Ich habe folgenden Codeteil:
Code:
public static Loesung getNachfolger(Loesung lsg) {
           Loesung nachbar = (Loesung) lsg.getNachbarn().next();
			
	   System.out.println("lsg: " + lsg.toString());
	   System.out.println("nachbar: " + nachbar.toString());

Und woher mein next() kommt das siehst du ja an meinem ersten Post.
Auf meiner Konsole steht jetzt aber Folgendes:
lsg: CPU0 : 6 ,11 ,15 ,16 ,18 = 1435
CPU1 : 0 ,3 ,13 = 417
CPU2 : 7 ,10 ,12 ,19 = 1178
CPU3 : 5 ,8 ,9 = 552
CPU4 : 2 = 60
CPU5 : 1 ,4 ,14 ,17 = 796
CPU6 : = 0
Gesamtlaufzeit: 1435

nachbar: CPU0 : 6 ,11 ,15 ,16 ,18 = 1435
CPU1 : 0 ,3 ,13 = 417
CPU2 : 7 ,10 ,12 ,19 = 1178
CPU3 : 5 ,8 ,9 = 552
CPU4 : 2 = 60
CPU5 : 1 ,4 ,14 ,17 = 796
CPU6 : = 0
Gesamtlaufzeit: 1435

Das bedeutet nachbar und lsg sind total identisch. Aber ich habe eigentlich im Iterator eine Stelle neu besetzt und dieses neu ja zurückgegeben. Was soll ich da noch herausfinden. Ich habe auch schon Ausgaben bei meinen Iterator machen lassen. Zu Hauf. Ich komme nicht drauf.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Iterator next() Nullpointer Java Basics - Anfänger-Themen 2
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
N Warum Springt iterator nur in der Schleife weiter Java Basics - Anfänger-Themen 9
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
J Methoden iterator for-schleife (hasNext() ) Java Basics - Anfänger-Themen 7
Stargirlxo Iterator + Methode Java Basics - Anfänger-Themen 10
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
O Iterator erneut! Java Basics - Anfänger-Themen 8
O Iterator für eine geordnete Menge Java Basics - Anfänger-Themen 134
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
K Iterator zurückliefern Java Basics - Anfänger-Themen 8
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
S Iterator einer Liste Java Basics - Anfänger-Themen 4
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
I Erste Schritte Iterator Java Basics - Anfänger-Themen 3
M Iterator funktioniert nicht Java Basics - Anfänger-Themen 5
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
O Interface Iterator Java Basics - Anfänger-Themen 2
M Collections Frage Beispielprogrammierung Iterator Java Basics - Anfänger-Themen 13
M Iterator Java Basics - Anfänger-Themen 25
J Iterator Funktioniert nicht richtig in StackImplementierung Java Basics - Anfänger-Themen 3
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
L Iterator Java Basics - Anfänger-Themen 1
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
O Kleine Frage zu Iterator und Iterable Java Basics - Anfänger-Themen 6
OnDemand Iterator Interfacve Java Basics - Anfänger-Themen 23
T Methoden Iterator über ArrayList Java Basics - Anfänger-Themen 3
W Iterator Java Basics - Anfänger-Themen 2
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
R Mit iterator auf Element zugreifen Java Basics - Anfänger-Themen 2
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
P Casting Warning bei Iterator Java Basics - Anfänger-Themen 32
F Wie Werte einer ArrayList an einen 'Custom'-Iterator übergeben? Java Basics - Anfänger-Themen 2
J Iterator Java Basics - Anfänger-Themen 5
P ArrayList mit Iterator / Iterable ausgeben Java Basics - Anfänger-Themen 8
B Funktionsweise Iterator unklar Java Basics - Anfänger-Themen 7
A Datentypen Iterator von hinten nach vorne durchlaufen Java Basics - Anfänger-Themen 4
D Wie Iterator Remove implementieren? Java Basics - Anfänger-Themen 11
B Datentypen Inhalt zum Iterator wieder aufrufen? Java Basics - Anfänger-Themen 10
D Iterator schaltet nicht weiter?! Java Basics - Anfänger-Themen 5
A Problem mit Iterator Java Basics - Anfänger-Themen 2
B Türme von Hanoi - Iterator Java Basics - Anfänger-Themen 50
V Hilfe beim implementieren von Iterator Java Basics - Anfänger-Themen 5
W Collections Iterator<E> Java Basics - Anfänger-Themen 7
L Lokale Variable und Instanzvariable innerhalb Iterator Java Basics - Anfänger-Themen 8
W OOP problem mit iterator! -.- Java Basics - Anfänger-Themen 9
B Iterator und Collection Java Basics - Anfänger-Themen 11
ruutaiokwu Iterator oder .size ??? Java Basics - Anfänger-Themen 6
vandread Iterator zählt nicht hoch?! Java Basics - Anfänger-Themen 3
L Problem mit Iterator bzw. Sortierte Liste Java Basics - Anfänger-Themen 14
N HashMap mit Iterator durchlaufen Java Basics - Anfänger-Themen 11
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
J Verschachtelte for-Schleife mit Löschen von Iterationen. Wie über Iterator abbilden? Java Basics - Anfänger-Themen 6
M Iterator Java Basics - Anfänger-Themen 15
L Implementation gesucht - ArrayList.iterator() Java Basics - Anfänger-Themen 3
M Eigener Iterator für LinkedList Java Basics - Anfänger-Themen 20
pun Iterator über ArrayList Java Basics - Anfänger-Themen 12
P Iterator.add() Java Basics - Anfänger-Themen 3
A For Schleife - Iterator wird null Java Basics - Anfänger-Themen 7
? Map und iterator Java Basics - Anfänger-Themen 11
0x7F800000 ungereimtheiten mit Iterator/ListIterator Java Basics - Anfänger-Themen 2
N "Dynamischer" Iterator Java Basics - Anfänger-Themen 21
J Iterator remove()? Java Basics - Anfänger-Themen 5
T Liste mit Iterator auslesen Java Basics - Anfänger-Themen 11
Kr0e Iterator Java Basics - Anfänger-Themen 2
D iterator instanziieren! Java Basics - Anfänger-Themen 11
M Der Umgang mit Iterator - Wie ein Objekt aus einer ArrayList Java Basics - Anfänger-Themen 2
J ArrayList mit Iterator Java Basics - Anfänger-Themen 3
W Iterator in Queue Java Basics - Anfänger-Themen 5
A Für was Iterator ? Java Basics - Anfänger-Themen 3
M warum interface iterator verwendbar? Java Basics - Anfänger-Themen 5
O Iterator - Durchlauf "einschränken" bzw. steuern&q Java Basics - Anfänger-Themen 2
K Collection und Iterator Java Basics - Anfänger-Themen 7
S iterator problem Java Basics - Anfänger-Themen 3
S Iterator --__-- Zugriff auf nächstes Element Java Basics - Anfänger-Themen 5
N Set + Iterator oder doch nur zu blöd API zu lesen Java Basics - Anfänger-Themen 32
R Java 5.0 neue For schleife Iterator was ist der fehler? Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
R Iterator und HashMap Java Basics - Anfänger-Themen 10
G Probleme mit Iterator Java Basics - Anfänger-Themen 2
E umgededrehte if anweisung funzt nicht , iterator. Java Basics - Anfänger-Themen 2
A Iterator, wie funkioniert das richtig? Java Basics - Anfänger-Themen 6
S Iterator Schreibweise Java Basics - Anfänger-Themen 7
P ArrayList, iterator: Fehler in while Schleife Java Basics - Anfänger-Themen 2
T Iterator Java Basics - Anfänger-Themen 8
G Frage zur Iterator ? Java Basics - Anfänger-Themen 12
A Iterator auf anfang setzen Java Basics - Anfänger-Themen 5
blackfeet Bildfadeffekt (Halptransparenz) & iterator Java Basics - Anfänger-Themen 8
C Problem mit verschachteltem Iterator Java Basics - Anfänger-Themen 2
R Problem mit Iterator Java Basics - Anfänger-Themen 6
M Problem mit Iterator.remove() Java Basics - Anfänger-Themen 5
R Enumeration oder Iterator? Java Basics - Anfänger-Themen 2
J Klasse Iterator Java Basics - Anfänger-Themen 5
D unregelmäßige NullPointerException bei LinkedList Iterator? Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben