Wth? übernimmt nichtübergebenen Wert (Graph)

M

Mujahiddin

Top Contributor
Hallo...
Ich habe einen Graphen, der mehrere Knoten, sogenannte Zentralen, beinhaltet. Jeder Knoten verweist auf ein Kanten-Array. Jede Kante hat zwei Knoten, "start" und "end". Wenn ich mit einem Knoten eine Kante nehme und deren Ende bestimmen will, muss man dies über die Methode
Java:
public Knoten getEnd(Knoten start)
{
	if (start == this.start)
		return end;
	return start;
}
aus der Klasse Kante bewerkstelligen.
Als Beispiel mal die Methode isNeighbourOf(Knoten neighbour) aus der Klasse Knoten:
Java:
public boolean isNeighbourOf(Knoten neighbour)
{
	for(int i=0; i<links.length; i++)
		if(links[i].getEnd(this) == neighbour)
			return true;
	return false;
}
(links = Kanten-Array)

Wenn man nun einen 'random' Pfad von einem zu einem anderen bestimmten Knoten definieren möchte, ackert er sich von einem Nachbarknoten zum nächsten Nachbarknoten, bis er eben zum Ziel ankommt und man kriegt die Knoten, die passiert wurden, zurück... Als 'Feature' ist eingebaut, dass man einen Knoten niemals zweimal passieren kann, das heißt, er checkt den ersten Nachbarn und guckt in einer vorgegebenen Liste, ob dieser Nachbar schon mal passiert wurde, wenn nein, dann gibt er ihm den Befehl weiter, wenn ja, selber Vorgang mit zweitem Nachbarn usw. usf.

Nun zum Problem: Ich habe eine GraphDemo erstellt und wollte schauen, ob so weit alles funzt, zu meiner Überraschung hat sich herausgestellt, dass es dies nicht tut...
Und zwar habe ich verschiedene Zentralen erstellt, die danach miteinander verknüpft, und die Methode 'getRandomPath' von irgendeinem Knoten zu einem anderen aufgegeben.

Start und Ende hat er gut ermittelt, als er dann bei Start losging, hat sein erster Nachfolger (über links.getEnd(this)) den Befehl erhalten, weiterzumachen. Beim zweiten Knoten ereignet sich allerdings ein unerklärliches Phänomen: über den Befehl getEnd(this) wird scheinbar er selbst zurückgegeben. Beim Debuggen ist aber alles perfekt! Er markiert die Stelle 'return start (start = Nachbar von Knoten 2);' und gibt somit den eigentlichen Nachbarn zurück, wenn er wieder zum Knoten springt, wird das zurückgegebene als er selbst erkannt und es würde in einer Endlosschleife ausarten, wäre mein 'Feature' mit Einmalpassieren nicht da...

Also Fazit:
Knoten 1 > läuft alles prima, er geht zu Knoten 2.
Knoten 2 > läuft nicht prima, er geht zu sich selbst.
> Da Knoten 2 bei getEnd(this) scheinbar sich selber zurückgibt, obwohl er das eigentlich nicht tut, aber irgendwie auch doch, wird eine Endlosschleife verhindert, weil ja das vermeintliche Ende von Knoten 2 (Knoten 2 selbst) bereits passiert wurde.
> Vollkommener Schwachsinn oder hab ich nen fatalen Fehler?

Code:
Java:
for(int i=0; i<links.length; i++)
	{
		boolean isPassed = false;
		for(int j=0; j<passed.length; j++)
			if(links[i].getEnd(this) == passed[j])
			{
				isPassed = true;
			}
		if(!isPassed)
		{
			Knoten[] passedPlusThis = new Knoten[passed.length+1];
			for(int k=0; k<passed.length; k++)
				passedPlusThis[k] = passed[k];
			passedPlusThis[passed.length] = this;
			Knoten neighbour = links[i].getEnd(this);
			Knoten[] path = neighbour.getRandomPath(end, passedPlusThis);
			if(path != null)
				return path;
		}
	}

Danke im Voraus, sorry für das viele Geschreibe, will nicht, dass nachher noch Fragen auftauchen
 
M

Marco13

Gesperrter Benutzer
Ja, das Problem bei solchen Fragen ist, dass man als Außenstehender noch weniger weiß, wo der Fehler liegen könnte - und dass es, wenn man es jetzt testweise mal selbst hinschreiben würde, funktionieren würde ;)

Was sagt er denn so bei
Java:
public Knoten getEnd(Knoten start)
{
    System.out.println("Auf Kante "+this+" mit "+this.start+" und "+this.end);
    System.out.println("gib mir die Gegenseite zu "+start);
    if (start == this.start)
    {
        System.out.println("Das ist "+end+". Ist das der übergebene? "+(end==start));
        return end;
    }
    System.out.println("Das ist "+this.start+". Ist das der übergebene? "+(this.start==start));
    return start;
}

Sicher, dass dort mit == verglichen werden muss, und nicht mit .equals(...) ?
 
M

Mujahiddin

Top Contributor
LOOOOOOOOOOOL
xDD
sooo dumm...
ich bin wirklich dumm... tut mir leid... tut mir echt sehr leid... es muss return this.start heißen, und nicht start...

So ein dummer Leichtsinnsfehler... Und ich habe schon an meiner Intelligenz gezweifelt (jetzt weiß ich wenigstens, dass ich kaum welche besitze)

so kommt man durcheinander, wenn man dauernd selbe variablen in methoden wie in attributen verwendet <.<

danke trotzdem marco für die bemühung :p das problem lag nicht an ==, schließlich ging ja beim debuggen alles... aber er hat start von der methode und nicht start des objekts zurückgegeben...

mit freundlichen grüßen
 
S

Schumi

Bekanntes Mitglied
Ja, da ist dann die Frage, ob es so sinnvoll ist einen Parameternamen gleich einem Variablennamen zu wählen wenn man ihn nicht direkt diesem zuweisen will (ala Setter).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Array übernimmt immer den letzten Input. Java Basics - Anfänger-Themen 14
U Methode übernimmt nicht veränderte klassenvariable Java Basics - Anfänger-Themen 5
M Neu instanzierte Klasse übernimmt Werte von anderer Instanz Java Basics - Anfänger-Themen 4
D Neue Array übernimmt Werte des alten nicht Java Basics - Anfänger-Themen 5
T Erste Schritte Textfeld übernimmt Größe nicht Java Basics - Anfänger-Themen 11
Miladriel Variable Übernimmt den Wert nicht Java Basics - Anfänger-Themen 22
B Wie übernimmt man Listeneinträge? Java Basics - Anfänger-Themen 3
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
P Verzweigungen Wert zurück geben Java Basics - Anfänger-Themen 2
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
F Java int-Wert wird resetet Java Basics - Anfänger-Themen 21
J Erste Schritte Wert aus JTextField zurückgeben Java Basics - Anfänger-Themen 6
UnknownInnocent Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
J Wert bei Objekterzeugung verändern Java Basics - Anfänger-Themen 12
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23
D Erste Schritte Java speichert wert des Scanners nicht Java Basics - Anfänger-Themen 2
B Erste Schritte if Anweisung mit Wert Übernahme Java Basics - Anfänger-Themen 3
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
UnknownInnocent x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
D Compiler-Fehler Array an Methode übergeben und Wert zurückbekommen Java Basics - Anfänger-Themen 3
I Schleife fragt Wert ab bis 0 kommt (mit IO.java klasse) Java Basics - Anfänger-Themen 16
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
S Wie erhöhe ich den Wert von mehren Integers auf einmal? Java Basics - Anfänger-Themen 5
J Wert eines Arrays einer Variable zuweisen, sobald der Wert eines anderen Arrays eintritt Java Basics - Anfänger-Themen 2
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17
E Aufruf auf Objekt mit übergebenem Wert? Java Basics - Anfänger-Themen 7
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
E Wert in Textfeld schreiben Java Basics - Anfänger-Themen 1
D Einen Wert unter einen ActionListener weitergeben Java Basics - Anfänger-Themen 1
N wert für progress auf 100% setzen Java Basics - Anfänger-Themen 5
N Methoden vorherigen Wert in einem Array lieferen Java Basics - Anfänger-Themen 8
Joker4632 Klassen BigDecimal Multiplikation liefert nicht erwarteten Wert Java Basics - Anfänger-Themen 6
? Methoden Boolean Wert vergleichen und einlesen Java Basics - Anfänger-Themen 1
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
M Denn dichtesten Wert finden Java Basics - Anfänger-Themen 3
krgewb Collections Schlüssel-Wert-Wert-Paare Java Basics - Anfänger-Themen 2
D Summe berechnen mit verändertem Wert aus Schleife Java Basics - Anfänger-Themen 1
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
G Variablen Variable nimmt keinen Wert an (BlueJ) Java Basics - Anfänger-Themen 4
F In LinkedList einen Wert ersetzen oder neu einfügen Java Basics - Anfänger-Themen 7
J Fehler bei Vergleich auf den grössten Wert Java Basics - Anfänger-Themen 2
G Größten und kleinsten Wert im Array ermitteln? Java Basics - Anfänger-Themen 7
G Wie kann ich diesen Wert ermitteln? Java Basics - Anfänger-Themen 4
D Hilfe bei int wert von char Java Basics - Anfänger-Themen 7
P Erste Schritte Wert in Liste eintragen Java Basics - Anfänger-Themen 28
A Wieso charAt(0) + charAt(3) = INT-Wert? Java Basics - Anfänger-Themen 5
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
E Methoden Methode liefert keinen Wert zurück Java Basics - Anfänger-Themen 16
T Combobox Wert auslesen und damit weiterrechnen Java Basics - Anfänger-Themen 6
H if-Abfrage, ungleich und falscher true Wert? Java Basics - Anfänger-Themen 11
G Wie kann ich einem StringBuilder einen int Wert formatiert hinzufügen? Java Basics - Anfänger-Themen 8
G Wie kann man den Erfolg einer Zuweisung als Boolean Wert verwenden? Java Basics - Anfänger-Themen 12
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
F Wert in Linux auf die Konsole schreiben Java Basics - Anfänger-Themen 3
N Variablen int Wert einem String abgeben Java Basics - Anfänger-Themen 8
BuTTerBroTHDx Char Wert in int casten ? Java Basics - Anfänger-Themen 4
O Wert in einer URL hinzufügen (in meinem Beispiel Google) Java Basics - Anfänger-Themen 7
D Array wird immer mir 100 für jeden Wert initialisiert? Java Basics - Anfänger-Themen 2
J Wert einer Variable erhöhen Java Basics - Anfänger-Themen 5
A Variablen Variable soll ihren Wert nach Initialisierung nicht mehr ändern Java Basics - Anfänger-Themen 2
M Variable nimmt nicht den gewollten Wert an Java Basics - Anfänger-Themen 6
S fraglicher indexOf Wert Java Basics - Anfänger-Themen 2
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
W Input/Output Modulo Wert speichern und ausgeben lassen Java Basics - Anfänger-Themen 3
G Erste Schritte Wie kann ich einen zurückgegebenen Wert ausgeben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben