mirror of
https://codeberg.org/qg-info-unterricht/zpg-graphentester.git
synced 2026-03-25 04:58:24 +01:00
Sync with upstream
This commit is contained in:
parent
39a2f13410
commit
66e8fa72bf
135 changed files with 38902 additions and 37757 deletions
129
graph/Kante.java
129
graph/Kante.java
|
|
@ -1,7 +1,7 @@
|
|||
package graph;
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Die Klasse Kante beschreibt die Datenstruktur einer Kante, bestehend aus Startknoten, Gewicht und Zielknoten.
|
||||
|
|
@ -10,16 +10,15 @@ import java.util.Arrays;
|
|||
* Auch soll sie das Kantengewicht verwalten und Aufschluss darueber geben, ob sie gefaerbt/geloescht ist oder nicht.
|
||||
*
|
||||
* @author Dirk Zechnall, Thomas Schaller
|
||||
* @version 22.07.2020 (v6.4)
|
||||
* @version 28.02.2023 (v7.0)
|
||||
* v7.0: Die Kanteninformationen werden in einer Hashmap gespeichert. Daher können beliebige weitere Informationen abgelegt werden.
|
||||
|
||||
*/
|
||||
public class Kante extends GraphElement
|
||||
{
|
||||
private Knoten start;
|
||||
private Knoten ziel;
|
||||
private double gewicht;
|
||||
private boolean markiert = false;
|
||||
private boolean geloescht = false;
|
||||
private int farbe = -1;
|
||||
|
||||
|
||||
/**
|
||||
* Der Konstruktor erstellt eine neue Kante mit Start- und Zielknoten und Kantengewicht.
|
||||
|
|
@ -30,7 +29,12 @@ public class Kante extends GraphElement
|
|||
* @param neuesGewicht Das neue Kantengewicht
|
||||
*/
|
||||
public Kante (Knoten neuerStart, Knoten neuerZiel, double neuesGewicht) {
|
||||
gewicht = neuesGewicht;
|
||||
super();
|
||||
set("Gewicht",neuesGewicht);
|
||||
set("Markiert", false);
|
||||
set("Gelöscht", false);
|
||||
set("Farbe", -1);
|
||||
setSortierkriterium("Gewicht");
|
||||
start = neuerStart;
|
||||
ziel = neuerZiel;
|
||||
}
|
||||
|
|
@ -39,42 +43,58 @@ public class Kante extends GraphElement
|
|||
* Die Methode init initialisiert die Kantenfaerbung (auf unmarkiert)
|
||||
*/
|
||||
protected void init() {
|
||||
markiert = false;
|
||||
geloescht = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setzt den Status einer Kante, der in einem String gespeichert ist.
|
||||
* Form: markiert,geloescht,farbe
|
||||
* Dabei sind markiert und geloescht boolsche Werte (0 = false, 1 = true) und
|
||||
* die farbe eine Zahl
|
||||
* @param status Statusstring
|
||||
*/
|
||||
public void setStatus(String status) {
|
||||
List<String> items = Arrays.asList(status.split("\\s*,\\s*"));
|
||||
this.markiert = items.get(0).equals("1");
|
||||
this.geloescht = items.get(1).equals("1");
|
||||
this.farbe = Integer.parseInt(items.get(2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert den Status einer Kante als String.
|
||||
* Form: markiert,geloescht,farbe
|
||||
* Dabei sind markiert und geloescht boolsche Werte (0 = false, 1 = true) und
|
||||
* die farbe eine Zahl
|
||||
* @return Statusstring
|
||||
*/
|
||||
public String getStatus() {
|
||||
return ""+(markiert ? "1," : "0,")+ (geloescht ? "1," : "0,")+ farbe;
|
||||
set("Markiert", false);
|
||||
set("Gelöscht", false);
|
||||
set("Farbe", -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert einen kurzen Text, der den Wert des Knotens angibt und innerhalb der Kreises
|
||||
* des Knotens angezeigt werden kann.
|
||||
* @return Array von Anzeigezeilen (dürfen max. 2 sein)
|
||||
*/
|
||||
public List<String> getKurztext(String[] namen) {
|
||||
int l = Math.min(namen.length,2);
|
||||
List<String> t = new ArrayList<String>();
|
||||
for(int i = 0; i<l; i++) {
|
||||
t.add(getString(namen[i]));
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert eine ausführliche Beschreibung der Werte des Knoten. Wird in dem Tooltext Fenster
|
||||
* angezeigt, wenn man mit der Maus über den Knoten geht.
|
||||
* @return Array von Anzeigezeilen
|
||||
*/
|
||||
public List<String> getLangtext(String[] namen) {
|
||||
int l = namen.length;
|
||||
List<String> t = new ArrayList<String>();
|
||||
|
||||
String symbol = "<->";
|
||||
if(g.isGerichtet()) symbol = "->";
|
||||
if(!start.getInfotext().equals("") && !ziel.getInfotext().equals("")) {
|
||||
t.add(start.getInfotext()+" "+symbol+" "+ziel.getInfotext());
|
||||
} else {
|
||||
t.add("Knoten Nr."+g.getNummer(start)+" "+symbol+" Knoten Nr."+g.getNummer(ziel));
|
||||
}
|
||||
|
||||
for(int i = 0; i<l; i++) {
|
||||
String w =getString(namen[i]);
|
||||
if(!w.isBlank())
|
||||
t.add(namen[i]+": "+w);
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Setzt das Gewicht der Kante
|
||||
*
|
||||
* @param neuesGewicht Das neu zu setzende Gewicht
|
||||
*/
|
||||
public void setGewicht(double neuesGewicht) {
|
||||
gewicht = neuesGewicht;
|
||||
set("Gewicht", neuesGewicht);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -83,7 +103,7 @@ public class Kante extends GraphElement
|
|||
* @return Gewicht der Kante
|
||||
*/
|
||||
public double getGewicht() {
|
||||
return gewicht;
|
||||
return getDouble("Gewicht");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -91,8 +111,8 @@ public class Kante extends GraphElement
|
|||
*
|
||||
* @param neuerSatrtKnoten Der neu zu setzende Startknoten
|
||||
*/
|
||||
public void setStart(Knoten neuerSatrtKnoten) {
|
||||
start = neuerSatrtKnoten;
|
||||
public void setStart(Knoten neuerStartKnoten) {
|
||||
start = neuerStartKnoten;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -139,7 +159,7 @@ public class Kante extends GraphElement
|
|||
* @param wert Der neu zu setzende markiert-Wert
|
||||
*/
|
||||
public void setMarkiert(boolean wert) {
|
||||
markiert = wert;
|
||||
set("markiert", wert);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -148,7 +168,7 @@ public class Kante extends GraphElement
|
|||
* @return markiert?
|
||||
*/
|
||||
public boolean isMarkiert() {
|
||||
return markiert;
|
||||
return getBoolean("markiert");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -157,7 +177,7 @@ public class Kante extends GraphElement
|
|||
* @param wert Der neu zu setzende gelöscht-Wert
|
||||
*/
|
||||
public void setGeloescht(boolean wert) {
|
||||
geloescht = wert;
|
||||
set("Gelöscht", wert);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -166,7 +186,7 @@ public class Kante extends GraphElement
|
|||
* @return gelöscht?
|
||||
*/
|
||||
public boolean isGeloescht() {
|
||||
return geloescht;
|
||||
return getBoolean("Gelöscht");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -176,12 +196,12 @@ public class Kante extends GraphElement
|
|||
* @return Nummer der Farbe
|
||||
*/
|
||||
public int getFarbe() {
|
||||
if(farbe == -1) {
|
||||
if(geloescht) return 2;
|
||||
if(markiert) return 1;
|
||||
if(getInt("Farbe") == -1) {
|
||||
if(isGeloescht()) return 2;
|
||||
if(isMarkiert()) return 1;
|
||||
return 0;
|
||||
}
|
||||
return farbe;
|
||||
return getInt("Farbe");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -190,7 +210,7 @@ public class Kante extends GraphElement
|
|||
*/
|
||||
public void setFarbe(int farbe) {
|
||||
if(farbe>=0 && farbe < 20)
|
||||
this.farbe = farbe;
|
||||
set("Farbe",farbe);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -198,19 +218,10 @@ public class Kante extends GraphElement
|
|||
*/
|
||||
|
||||
public void setStandardFarbe() {
|
||||
farbe = -1;
|
||||
setFarbe(-1);
|
||||
}
|
||||
|
||||
/** Vergleicht die Kante mit einer anderen Kante bezüglich ihres Gewichts
|
||||
* @param e andere Kante
|
||||
* @return kleiner 0 die andere Kante hat ein größeres Gewicht, größer 0 die andere Kante hat ein kleineres Gewicht, gleich 0 beides sind gleich
|
||||
*/
|
||||
public int compareTo(GraphElement e) {
|
||||
double w1, w2;
|
||||
if(e instanceof Knoten) w1 = ((Knoten) e).getDoubleWert(); else w1 = ((Kante) e).getGewicht();
|
||||
w2 = getGewicht();
|
||||
return (int) (w2-w1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Die Methode ueberschreibt die Methode toString() und gibt die String-Raepraesentation einer Kante zurueck
|
||||
|
|
@ -219,7 +230,7 @@ public class Kante extends GraphElement
|
|||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return " --("+gewicht+")--> ";
|
||||
return " --("+getGewicht()+")--> ";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue