# Queue in Form eines dynamischen Arrays



## babuschka (2. Jan 2012)

Hallo zusammen,
habe eine Queue in Form eines dynamischen Arrays implementiert. 
Jetzt habe ich folgendes Problem. Ich möchte gerne eine Methode schreiben, die jedes Element vollständig durchgeht und danach -zufällig- wieder in die "Queue" einreiht.
Hat jemand einen Denkansatz für mich?

VG Greenbird


----------



## Final_Striker (2. Jan 2012)

Was soll der Zweck eines solchen Vorgehens sein?


----------



## babuschka (2. Jan 2012)

Tja das frage ich mich auch. Aber es gibt leider Dozenten die an so etwas Spaß haben. Ich weiß selber, dass es völliger Schwachsinn ist ;-)

public void randomize(){
		ArrayList<T> random = new ArrayList<T>();
		Collections.shuffle(random);
		RandomQueue<T> out = new RandomQueue<T>();
		out.enqueue((T) random);

	}

geht sowas??


----------



## SlaterB (2. Jan 2012)

ob dein Code etwas mit einem 'dynamischen Array' zu tun hat, kann niemand sagen,
nicht zuletzt, weil der Begriff 'dynamisches Array' unbekannt ist..

Formulierungen wie 'jedes Element vollständig durchgehen' tragen auch nicht zur Klarheit bei

es könnte alles vom Staubsauber bis zum Atomkraftwerk herauskommen


----------



## babuschka (2. Jan 2012)

Die Warteschlange wird über die Methoden enqueue und dequeue gefüttert.
Die Warteschlange wird über ein dynamisches Array realisiert, welches folgende Methoden zur Verfügung stellt:

public class DynamicArray { 
DynamicArray();
void set(int index, Object element); 
Object get(int index);
void add(Object element);
Object remove(int index);
int size();
}


Die Klasse RandomQueue beinhaltet folgende Methoden:
public class RandomQueue<T> {
public RandomQueue();
public void enqueue (T data);
public T dequeue() throws NoSuchElementException;
public void randomize(;
public boolean isEmpty();
public int size();


----------



## SlaterB (2. Jan 2012)

in randomize() der Klasse RandomQueue wird ein neues RandomQueue-Objekt erstellt?
das klingt mir nicht sinnvoll, zumal du das 'out' dort nicht weiterverwendest,

wie ist denn RandomQueue intern implementiert, verlinkte Liste, Array, Liste?
diese interne Struktur musst du auseinandernehmen

was hat DynamicArray damit bisher zu tun, verwendet RandomQueue intern ein DynamicArray?
hast du überhaupt für beide Klassen schon eine Implementierung?
poste die dochmal, randomize() ist eher am Ende interessant, vorher sollte alles normale funktionieren,

falls es nicht eine theoretische Aufgabe ist, 'angenommen der Rest funktioniert, wie sieht dann die Methode randomize() aus?'

deine Methode könnte durchaus in die richtige Richtung gehen, nachdem was ich bisher verstehe, 
nur erstelle kein neues RandomQueue, sondern füge die Elemente in das eigene Objekt ein?
und zwar doch wohl kaum die ganze ArrayList random, sondern die Elemente daraus einzeln per Schleife?
ach ja, und die ArrayList random ist bisher leer??, da muss natürlich erstmal alles rein,
und das eigene Objekt muss noch geleert werden, falls das beim Übertrag in die ArrayList nicht sowieso passiert,
fehlt also doch noch ne Menge..


----------



## babuschka (2. Jan 2012)

RandomQueue erzeugt im Konstruktor nur ein DynamicArray. 


```
public class RandomQueue <T>{
	
	private DynamicArray<T> entries;
	
	public RandomQueue(){
		entries = new DynamicArray<T>();
	}
	
	public void enqueue(T data){
		entries.add(data);
	}
	
	public void randomize(){
		DynamicArray<T> random = new DynamicArray<T>();
		Collections.shuffle(random);
		RandomQueue<T> out = new RandomQueue<T>();
		out.enqueue((T) random);
		
	}
	
	public boolean isEmpty(){
		if(this == null){
			return true;
		}
		return false;
	}
	
	public int size(){
		return this.size();
		
	}
```

Das große Problem ist für mich im Prinzip nur, wie ich das DynamicArray entries durchlaufe und es in zufälligerreihenfolge wieder in die "Queue" die ja eigentlich auch ein array ist, einfüge. Ziemlich verwirrend. Aber so ticken unsere Dozenten leider


----------



## SlaterB (2. Jan 2012)

was redest du vom Ticken deiner Dozenten?
lassen wir den Zufall weg, kannst du überhaupt die Entries durchlaufen, der Reihe nach ausgeben?
das wäre ja ne ziemlich sinnvolle Aktion


----------

