JTable bzw. Tabelle in bestimmte Form überführen

Binary.Coder

Aktives Mitglied
Hallo zusammen,

ich habe den Djikstra-Algorithmus programmiert und die Eingabe im Quellcode erfolgte bis jetzt folgendermaßen:

Für einen Knoten
Code:
		Knoten v0 = new Knoten("A");
		Knoten v1 = new Knoten("B");
Für eine Kante
Code:
		v0.nachbarn = new Kante[] { new Kante(v2, 2.0) };
		v1.nachbarn = new Kante[] { new Kante(v0, 3.0), new Kante(v2, 4.0),	new Kante(v4, 2.0), new Kante(v3, 1.0), };

Ein wenig Hintergrundwissen: Der Dijkstra sucht der kürzesten Weg zwischen zwei Knoten.
Natürlich können und sind in der Regel mehrere Knoten zwischen zwei Knoten und es gibt mehrere Wege dorthin.

Jedenfalls habe ich jetzt eine GUI, die mir eine nxn Matrix (zu Demozwecken) eine 5 x 5 Matrix ausliest.

public static double [][] aMatrix;

Diese kann man sich so vorstellen
A B C D E
A 5
B 6
C 3
D 6
E

Werte sind zufällig.

Die spalten Links sind "von" Spalten und oben "zu" Spalten.
A->B = 5 bedeutet es gibt eine Kante von A nach B mit dem Gewicht / den Kosten 5.
Müsste quasi übersetzt werden zu:
Code:
v0.nachbarn = new Kante[] { new Kante(v1, 5.0) }

Jetzt ist die Frage wie ich das anstelle.
Meine Idee:
Ich muss erstmal cool bleiben (bei sowas ist es immer besser, wenn man erstmal cool bleibt).

Dann schaue ich, wie groß das Kanten Array für die verschiedenen Knoten sein muss.
Idee war hier so etwas wie zwei verschachtelte for Schleifen. Um zu lesen wie viele Nachbaren ein Knoten hat.

Dann muss ich ich Werte irgenwie geschickt durch weitere Schleifen in die Kantenarrays übergeben.

Seht ihr vielleicht eine einfachere Möglichkeit?

Vielen Dank!
 
Ein wenig Hintergrundwissen: [...]
Was dein Programm macht ist denke ich mittlerweile hinreichend bekannt 😛

Um das ganze etwas dynamischer zu gestalten solltest du von Arrays auf Listen Umstellen.
Dann hast du in deiner Knoten Klasse vllt sowas:
Java:
List<Kante> kanten;
Wenn du jetzt ne Kante hinzufügen willst hast du vllt so eine Methode:
Java:
public void addKante(Knoten ziel, double kosten) {
    kanten.add(new Kante(ziel, kosten));
}
Diese Methode kannst du dann von außen (z.b. beim durchlaufen deines 5x5 Arrays) aufrufen.
 
Danke für den Tipp aber unser gesamtes System basiert auf Arrays und lässt sich leider nicht mal eben umschreiben.

Abgabe des Projekt bzw. Vorstellung ist übrigens 10 Uhr - spricht 13:30 Stunden remaining 😉
 
Dann good luck und happy coding... 😉

Es würde sich vllt sowas anbieten:
Java:
		Knoten[] knoten = ...;
		double[][] kosten = ...;
		
		for (int i = 0; i < knoten.length; i++) {
			for (int j = 0; j < knoten.length; j++) {
				if (i == j) continue;
				
				Kante k = new Kante(knoten[i], knoten[j], kosten[i][j]);
			}
		}
Dann musst du halt noch schauen wie du die Kante an die Knoten bindest.
Dafür müsste man aber nen bissl mehr von deinem Code kennen.
 
Hängen jetzt an folgender Stelle fest:
Wir wissen wie viele Knoten es gibt und möchten diese in einer Schleife erstellen:

Nur wie kann ich Knoten in dieser Art erstellen?
Code:
Knoten v0 = new Knoten("A");
		Knoten v1 = new Knoten("B");
		Knoten v2 = new Knoten("C");

also zum müsste ich irgendwie "hinter" v schreiben können, was nicht einfach so geht und zum anderen bräuchte ich etwas, was Buchstaben erzeugt.

Jemand einen Tipp / eine Idee?
 

Zurück
Oben