Warteschlange mit Priorität

Mem0reX

Mitglied
Hi,

ich versuch grad eine Warteschlange zu programmieren. Diese soll einige COntainer zwischenspeichern bevor ich sie bearbeite. Die Container haben unterschiedliche Priorität und werden somit nicht einfach ans ende der Schlange gesetzt sondern manchmal halt auch mitten rein.
Hab sowas schonmal ähnlich als stapel programmiert, nur damals ohne Prioritäten^^

Nun wollt ich mal zur probe 10 zufällige Container in die Schlange legen. Java gibt keine Fehlermeldung aus, aber es wird nur der letzte Container gespeichert und vermutlich die anderen überschrieben.
Aber iwi find ich den Fehler net. Hier ist mein Qt:

Java:
public class Warteschlange {
	private static cpoint head;
	
	public void create(){
		head=new cpoint();
		head.route2=null;
	}
	
	public void push(Container c){
		cpoint temp=new cpoint();
		cpoint temp2=new cpoint();
		temp2.wert=c;
		if(empty()){
			head.route2=temp2;
			temp2.route1=head;
		}
		else{
			temp=head.route2;
			while ((temp2.wert.getpriorität()<=temp.wert.getpriorität())&&(temp.route2!=null)){
				temp=temp.route2;
			}
			temp2.route1=temp.route1;
			temp2.route2=temp;
			temp.route1=temp2;
		}
	}
	
	public Container pop(){
		Container temp=new Container();
		if(empty()){
			return null;
		}
		else{
			temp=head.route2.wert;
			if(head.route2.route2==null){
				head.route2=null;
			}
			else{
				head.route2=head.route2.route2;
			}
		}
		return temp;
	}
	
	public boolean empty(){
		
		if (head.route2==null){
			return true;
		}
		else{
			return false;
		}
	}
}

public class cpoint {
	Container wert;
	cpoint route1;
	cpoint route2;
}

public class Container {
	private int priorität;
	public int wert;
	
	public int getpriorität(){
		return this.priorität;
	}
	public void setpriorität(int p){
		this.priorität=p;
	}
}

mfg
 

c_sidi90

Top Contributor
Ohne jetzt großartig auf dein Code einzugehen, wo und vorallem wohin willst du denn die 10 Container speichern? Ich seh keine Datenstruktur welche mehrere Objekte vom Typ Container in deinem Code aufnehmen kann.
 

HoaX

Top Contributor
Ohne jetzt großartig auf dein Code einzugehen, wo und vorallem wohin willst du denn die 10 Container speichern? Ich seh keine Datenstruktur welche mehrere Objekte vom Typ Container in deinem Code aufnehmen kann.

Das ist eine verkettete Liste. Lässt sich aber wirklich schlecht erkennen bei der bescheidenen Namensgebung der Variablen.

Der Fehler liegt imo bei Zeile 25. Da gehört auch noch ein
Code:
temp2.route1.route2=temp2;
hin.
 

Mem0reX

Mitglied
Danke für eure Hilfe und ich entschuldige mich für die etwas blöde namenwahl

ich hab deinen hinweis mal befolgt und die zeile versucht einzufügen. Zudem ist mir aufgefallen das ich die Elemente am ende der Schlange nicht richtig behandle.

ich hab Zeile 23-25 durch folgenen Code ausgetauscht:
Java:
		if ((temp.route2==null)&&(temp2.wert.getpriorität()<=temp.wert.getpriorität())){
				temp2.route1=temp;
				temp.route2=temp2;
				temp2.route1.route2=temp2;
			}
			else{
				temp2.route1=temp.route1;
				temp2.route2=temp;
				temp.route1=temp2;
				temp2.route1.route2=temp2;
			}

Leider funktioniert es immer noch nicht korrekt. Er speichert zwar jetzt 10 Container aber die sind leider alle identisch und entsprechen dem letzten zufällig generiertem.
 

Mem0reX

Mitglied
Danke für den Hinweis, werde es mal ausprobieren. Das könnte mir erstmal vllt helfen.
Wär halt nur schön wenn meine version auch gehen würde^^
 

Ähnliche Java Themen

Neue Themen


Oben