Aufgabe 10.2


Genauer: Man braucht eine Klasse, die das Interface Schlangeneintrag selbst implementiert oder von einer Klasse abgeleitet ist, die das tut.

Und da Knoten (in EinStern.java) Schlangeneintrag implementiert, ist alles in Ordnung…

(auch wenn das Interface sehr unglücklich gewählt ist, weil es keine Methoden zum Auslesen von Priorität usw. vorsieht…)


sorry, dass ich mich so dumm anstelle - es liegt nur ein verständnisproblem vor. ich möchte doch erstmal eine funktionierende halde implementieren, welche offensichtlich aus diesen ominösen schlangeneintrags-objekten besteht.
d.h. ich brauche doch eine klasse halde die prioritätswarteschlage und schlangeneintrag als schnittstellen bereitstellt und dann will ich den mist doch irgendwie testen. sprich ich brauch (wenn auch nur testweise) doch objekte vom typ schlangeneintrag. woher kommen die?


Möglichkeit 1:
wwwcip.informatik.uni-erlangen.de/~siliwoit

Möglichkeit 2:
[m]EinStern.Knoten[/m] als [m]public static[/m] deklarieren, und gleich drauflosimplementieren.


Jetzt hab ich nochmal ne Kurze Verständnisfrage zum Heap.
Die Definition besagt ja eigentlich nur, dass alle Ebenen bis auf die unterste komplett gefuellt sein muessen, die unterste von links beginnend gefuellt sein muss, und die beiden Nachfolger eines Elements kleiner sind als das Element selbst (so stehts zumindest bei wiki und co).
Das stellt ja aber keine eindeutige Definition dar, es waeren doch beispielsweise diese beiden Anordnungen gueltige Heaps mit den gleichen Elementen:

[code]
125
/
3 80
/\ /
1 2 30 15

125

/
15 80
/\ /
1 2 30 3[/code]

Oder ist es schon so, dass auch die einzelnen Unterbaeume untereinander verglichen werden muessen?

gruß
Nic


richtig, das sind 2 moeglichkeiten, wie deine Halde aussehen darf und auch kann. Wie die unteren Elemente geordnet sind, interessiert dich nicht, solange die Haldeneigenschaft erfuellt ist. Die methode pop() liefert ja immernur das oberste Element (das mit der hoechsten Prioritaet).
Die die darunter kommen, muessen nicht vollstaendig sortiert sein, genau das macht die Halde ja so schnell.


hab mal ne frage zur knoten klasse
public boolean zuErsetzenDurch(Schlangeneintrag s)
was soll ich damit machen
leg ich irgendwo fest das allgemein nur erhöhungen oder verringerungen erlaubt sind oder steh ich grad auf dem schlauch und check das system nicht
kontra das system -.- :wink:


Bei Knoten ist das Ganze schon recht speziell für den A*-Algorithmus – und da macht es keinen Sinn, in der offenen Liste einen vorhandenen Eintrag durch einen mit höheren Wegkosten zu ersetzen…


public int vergleichePrioritaetMit ( Schlangeneintrag s )

	{

		...

		else  if ( this  < s )

		{

			return -1;

		}
...
}

kann mir mal einer sagen warum das so nicht geht?

javac Halde.java
Halde.java:142: operator < cannot be applied to Halde,int
else if ( this < 0 )
^
1 error


  1. Zwei Objekte können nicht mit den Operatoren [m]<[/m] bzw. [m]>[/m] verglichen werden.
  2. Das Interface [m]Schlangeneintrag[/m] soll nicht in deiner [m]Halde[/m] implementiert werden, sondern in der Klasse [m]Knoten[/m] in der Datei [m]EinStern.java[/m].

mir stellt sich dann die frage wie ich das machen soll


Siehe http://fsi.informatik.uni-erlangen.de/forumtest/thread/2991,4#3293.


wie soll die Methode update() funktionieren?

Wie weis ich ob der Schlangeneintrag s neu eingefügt werden muss oder einer (welcher?) der bereits vorhandenen Schlangeneinträge ersetzt werden muss?

Danke


Jeder [m]Schlangeneintrag[/m] bringt eine Methode namens [m]gleicheEntitaet()[/m] mit. Damit lässt sich überprüfen, ob zwei Einträge beide das selbe Element darstellen.

Problem mit EinStern
N’abend,

wahrscheinlich kann mir jemand sagen warum mein Compiler das hier ausgiebt,

EinStern.java:19: cannot resolve symbol
symbol : variable prio
location: interface Schlangeneintrag
if(this.prio == s.prio) return 0;
^
EinStern.java:20: cannot resolve symbol
symbol : variable prio
location: interface Schlangeneintrag
else if(this.prio < s.prio) return -1;
^

wenn ich folgendes schreibe:
public class Knoten implements Schlangeneintrag {
private Comparable obj;
private int prio;

public int vergleichePrioritaetMit(Schlangeneintrag s){
    if(this.prio == s.prio)   return 0;
    else if(this.prio < s.prio)  return -1;
    else return 1;
	}

Danke im Voraus


Die Mitgliedsvariable [m]prio[/m] ist [m]private[/m], deswegen kann nicht von “außen” darauf zugegriffen werden. Einfach in [m]public[/m] umändern!


Nein, geht auch nicht …
Ich hab’ mit “public”, “private” und “static” schon rumgespielt - geht nicht. :‘( :’( :cry:


Ah, es klingelt! :rolleyes:
Also, [m]prio[/m] muss auf jeden Fall als [m]public[/m] deklariert sein. Und dann versuch’s mal mit [m]((Knoten) s).prio[/m] statt [m]s.prio[/m].


Danke sehr!
Jetzt geht’s :gun:


Hat eigentlich schon jemand den A*-Testcase ausprobiert? Der ärgert mich nämlich grad schon wieder…


Muessen die Knoten in der Halde sortiert werden?
Wenn ja, geschieht das nach rechter Knoten>linker Knoten>Vater-Knoten bzw. umgekehrt Rechts<LinksRechts>Papa bzw. Links<Rechts<Papa?