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
|
|
@ -1,6 +1,7 @@
|
|||
package graph;
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Diese Klasse Knoten definiert einen Knoten.
|
||||
|
|
@ -8,17 +9,16 @@ import java.util.Arrays;
|
|||
* Im Infotext kann eine zusätzliche Information für die Anzeige gespeichert werden.
|
||||
*
|
||||
* @author Dirk Zechnall, Thomas Schaller
|
||||
* @version 22.07.2020 (v6.4)
|
||||
* @version 28.02.2023 (v7.0)
|
||||
* v7.0: Die Knoteninformationen werden in einer Hashmap gespeichert. Daher können beliebige weitere Informationen abgelegt werden.
|
||||
*/
|
||||
public class Knoten extends GraphElement
|
||||
{
|
||||
private String infotext;
|
||||
private double wert; // wird z.B. fuer den Colorierungs-Algorithmus verwendet - speichert da die Farben (codiert als Zahlen)
|
||||
private boolean istMarkiert = false;
|
||||
private boolean istBesucht = false;
|
||||
|
||||
|
||||
private int x;
|
||||
private int y;
|
||||
private int farbe = -1;
|
||||
|
||||
/**
|
||||
* Der Konstruktor erstellt einen neuen Knoten mit einem neuen Namen
|
||||
*
|
||||
|
|
@ -26,10 +26,7 @@ public class Knoten extends GraphElement
|
|||
* @param y y-Position des Knotens
|
||||
*/
|
||||
public Knoten(int x, int y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
wert = 0;
|
||||
infotext = "";
|
||||
this(x,y,0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -40,62 +37,74 @@ public class Knoten extends GraphElement
|
|||
* @param neuerWert Der neue Wert des Knotens
|
||||
*/
|
||||
public Knoten(int x, int y, double neuerWert) {
|
||||
super();
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
wert = neuerWert;
|
||||
infotext = "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Setzt den Status eines Knotens aus einem Status-String
|
||||
* Format: wert,markiert,besucht,farbe
|
||||
* wobei wert eine double-Zahl, mariert und besucht ein boolean-Wert (0=false, 1 = true) und
|
||||
* farbe eine zahl ist.
|
||||
*
|
||||
* @param status Der Statusstring
|
||||
*/
|
||||
public void setStatus(String status) {
|
||||
List<String> items = Arrays.asList(status.split("\\s*,\\s*"));
|
||||
this.wert = Double.parseDouble(items.get(0)); // wird z.B. fuer den Colorierungs-Algorithmus verwendet - speichert da die Farben (codiert als Zahlen)
|
||||
this.istMarkiert = items.get(1).equals("1");
|
||||
this.istBesucht = items.get(2).equals("1");
|
||||
this.farbe = Integer.parseInt(items.get(3));
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert den Status eines Knotens als Status-String
|
||||
* Format: wert,markiert,besucht,farbe
|
||||
* wobei wert eine double-Zahl, mariert und besucht ein boolean-Wert (0=false, 1 = true) und
|
||||
* farbe eine zahl ist.
|
||||
*
|
||||
* @return Der Statusstring
|
||||
*/
|
||||
public String getStatus() {
|
||||
return ""+wert+","+(istMarkiert ? "1," : "0,")+ (istBesucht ? "1," : "0,")+ farbe;
|
||||
set("Wert",neuerWert);
|
||||
set("Markiert", false);
|
||||
set("Geloescht", false);
|
||||
set("Farbe", -1);
|
||||
setSortierkriterium("Wert");
|
||||
}
|
||||
|
||||
/**
|
||||
* Die Methode init initialisiert den Zustand eines Knotens
|
||||
*/
|
||||
protected void init() {
|
||||
wert = 0.0;
|
||||
farbe = -1;
|
||||
istMarkiert = false;
|
||||
istBesucht = false;
|
||||
set("Wert", 0.0);
|
||||
set("Farbe", -1);
|
||||
set("Markiert", false);
|
||||
set("Besucht", false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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++) {
|
||||
String text = getString(namen[i]);
|
||||
if(text.length()>3)
|
||||
t.add(text.substring(0,3));
|
||||
else
|
||||
t.add(text);
|
||||
}
|
||||
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>();
|
||||
t.add("Knoten Nr. "+g.getNummer(this));
|
||||
for(int i = 0; i<l; i++) {
|
||||
String w =getString(namen[i]);
|
||||
if(!w.isEmpty())
|
||||
t.add(namen[i]+": "+w);
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
/** Setzt den Infotext für einen Knoten
|
||||
* @param infotext Der neue Text
|
||||
*/
|
||||
public void setInfotext(String infotext) {
|
||||
this.infotext = infotext;
|
||||
set("Infotext", infotext);
|
||||
}
|
||||
|
||||
/** Liefert den Infotext des Knotens
|
||||
* @return Der Infotext
|
||||
*/
|
||||
public String getInfotext(){
|
||||
return infotext;
|
||||
return getString("Infotext");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -104,7 +113,7 @@ public class Knoten extends GraphElement
|
|||
* @param neuerWert Der neu zu setzende Wert
|
||||
*/
|
||||
public void setWert(double neuerWert) {
|
||||
wert = neuerWert;
|
||||
set("Wert", neuerWert);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -113,7 +122,7 @@ public class Knoten extends GraphElement
|
|||
* @return Wert des Knotens
|
||||
*/
|
||||
public int getIntWert() {
|
||||
return (int) wert;
|
||||
return getInt("Wert");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -122,7 +131,7 @@ public class Knoten extends GraphElement
|
|||
* @return Wert des Knotens
|
||||
*/
|
||||
public double getDoubleWert() {
|
||||
return wert;
|
||||
return getDouble("Wert");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -131,7 +140,7 @@ public class Knoten extends GraphElement
|
|||
* @param markiert Der neu zu setzende Markiertwert
|
||||
*/
|
||||
public void setMarkiert(boolean markiert) {
|
||||
istMarkiert = markiert;
|
||||
set("Markiert", markiert);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -140,7 +149,7 @@ public class Knoten extends GraphElement
|
|||
* @return markiert?
|
||||
*/
|
||||
public boolean isMarkiert() {
|
||||
return istMarkiert;
|
||||
return getBoolean("Markiert");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -148,8 +157,8 @@ public class Knoten extends GraphElement
|
|||
*
|
||||
* @param markiert Der neu zu setzende Besuchtwert
|
||||
*/
|
||||
public void setBesucht(boolean markiert) {
|
||||
istBesucht = markiert;
|
||||
public void setBesucht(boolean besucht) {
|
||||
set("Besucht",besucht);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -158,10 +167,9 @@ public class Knoten extends GraphElement
|
|||
* @return besucht?
|
||||
*/
|
||||
public boolean isBesucht() {
|
||||
return istBesucht;
|
||||
return getBoolean("Besucht");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gibt den Index der Farbe des Knoten zurück.
|
||||
* Standardmäßig hängt die Farbe von den Attributen markiert und besucht ab.
|
||||
|
|
@ -169,17 +177,17 @@ public class Knoten extends GraphElement
|
|||
* @return Farbe des Knotens
|
||||
*/
|
||||
public int getFarbe() {
|
||||
if (farbe == -1) {
|
||||
if (getInt("Farbe") == -1) {
|
||||
int f = 0;
|
||||
if(istMarkiert) {
|
||||
if(isMarkiert()) {
|
||||
f += 1;
|
||||
}
|
||||
if(istBesucht) {
|
||||
if(isBesucht()) {
|
||||
f += 2;
|
||||
}
|
||||
return f;
|
||||
}
|
||||
return farbe;
|
||||
return getInt("Farbe");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -190,15 +198,15 @@ public class Knoten extends GraphElement
|
|||
*/
|
||||
|
||||
public void setFarbe(int farbe) {
|
||||
this.farbe = farbe;
|
||||
set("Farbe",farbe);
|
||||
}
|
||||
|
||||
/** Gibt zurück, ob die Knotenfarbe automatisch aus den Attributen ermittelt wird.
|
||||
* @return true=Farbe wird automatisch bestimmt, false=Farbe wurde explizit gesetzt.
|
||||
|
||||
|
||||
*/
|
||||
public boolean isFarbeAutomatisch() {
|
||||
return this.farbe == -1;
|
||||
return getInt("Farbe") == -1;
|
||||
}
|
||||
|
||||
/** Legt fest, ob die Knotenfarbe automatisch aus den Attributen ermittelt wird.
|
||||
|
|
@ -207,9 +215,9 @@ public class Knoten extends GraphElement
|
|||
*/
|
||||
public void setFarbeAutomatisch(boolean auto) {
|
||||
if(auto) {
|
||||
farbe = -1;
|
||||
set("Farbe", -1);
|
||||
} else {
|
||||
if(farbe == -1) farbe = 0;
|
||||
if(isFarbeAutomatisch()) set("Farbe", 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -236,21 +244,11 @@ public class Knoten extends GraphElement
|
|||
|
||||
/** Setzt die y-Position des Knotens
|
||||
* @param y y-Postion
|
||||
*/ public void setY(int y) {
|
||||
*/
|
||||
public void setY(int y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
/** Vergleicht den Knoten mit einem anderen Knoten bezüglich seines Werts
|
||||
* @param e anderer Knoten
|
||||
* @return kleiner 0 der andere Knoten hat einen größeren Wert, größer 0 der andere Knoten hat einen kleineren Wert, gleich 0 beide sind gleich
|
||||
*/
|
||||
public int compareTo(GraphElement e) {
|
||||
double w1, w2;
|
||||
if(e instanceof Knoten) w1 = ((Knoten) e).getDoubleWert(); else w1 = ((Kante) e).getGewicht();
|
||||
w2 = getDoubleWert();
|
||||
return (int) (w2-w1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Die Methode ueberschreibt die Methode toString() und gibt die String-Raepraesentation eines Knotens zurueck
|
||||
*
|
||||
|
|
@ -258,6 +256,7 @@ public class Knoten extends GraphElement
|
|||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return "["+infotext+","+wert+","+istMarkiert+","+istBesucht+"]";
|
||||
|
||||
return getStatus();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue