Ich habe eine abstrakte Klasse namens DrawingObject, die um vier Unterklassen erweitert wird: Point, Line, FreeFormLine und Circle. DrawingObject implementiert Comparable und ich habe die Methode compareTo definiert wie dieseVergleichen verschiedener Objekte
public int compareTo(DrawingObject object)
{
if(object instanceof Point && this instanceof Point)
{
//determine which has a higher value
return 0;
}
else if(object instanceof Point && this instanceof Line)
return 1;
else if(object instanceof Point && this instanceof FreeFormLine)
return 1;
else if(object instanceof Point && this instanceof Circle)
return 1;
else if(object instanceof Line && this instanceof Point)
return -1;
else if(object instanceof Line && this instanceof Line)
{
//determine which has a higher value
return 0;
}
else if(object instanceof Line && this instanceof FreeFormLine)
return 1;
else if(object instanceof Line && this instanceof Circle)
return 1;
else if(object instanceof FreeFormLine && this instanceof Point)
return -1;
else if(object instanceof FreeFormLine && this instanceof Line)
return -1;
else if(object instanceof FreeFormLine && this instanceof FreeFormLine)
{
//determine which has a higher value
return 0;
}
else if(object instanceof FreeFormLine && this instanceof Circle)
return 1;
else if(object instanceof Circle && this instanceof Point)
return -1;
else if(object instanceof Circle && this instanceof Line)
return -1;
else if(object instanceof Circle && this instanceof FreeFormLine)
return -1;
else if(object instanceof Circle && this instanceof Circle)
{
//determine which has a higher value
return 0;
}
return 0;
}
Jetzt zu sehen, dass ich das ich den Code die Sortierung nach Wert verlängern möchte. Ich bin verwirrt, wie ich das machen soll. Zum Beispiel hat Punkt zwei Instanzfelder, doppeltes x und doppeltes y. Ich bin verwirrt, wonach ich sortieren soll. Ich bin auch verwirrt über die anderen Arten von Objekten und wie man sie sortiert. Jede Klasse verfügt über eine equals -Methode, die in DrawingObject als abstrakt deklariert, jedoch in jeder Unterklasse implementiert ist.
Hier sind die Beschreibungen der Felder in jeder Klasse: Punkt hat zwei doppelte Felder, x und y. Diese repräsentieren die Koordinaten in einem kartesischen Koordinatengitter des Punktes. Zeile hat zwei Punktfelder, p1 und p2. Diese repräsentieren den Start- und Endpunkt der Linie. FreeFormLine hat ein ArrayList-Feld, Punkte. Dies stellt alle Punkte entlang der Linie dar. Kreis hat ein Punktfeld, Zentrum, und ein Doppelfeld, Radius. Diese repräsentieren den Mittelpunkt und den Radius des Kreises.
Zusammenfassend, wie kann ich feststellen, welches Objekt mehr oder weniger Wert hat, wenn mehr als ein Feld ausgewertet werden soll?
Bearbeiten: Der Zweck dieser Sortierung ist es, mich effizient durch eine Reihe von DrawingObjects mit binärer Suche suchen.
Das ist etwas, was Sie beantworten müssen. Es ist zu breit - beispielsweise könnte es auf der Linienlänge (oder dem Kreisradius) oder dem am weitesten links liegenden Punkt der Linie (2D vorausgesetzt) basieren. Es gibt keine allgemeine Antwort. – John3136
Ich bin mir dessen bewusst. Ich suche mehr Rat als eine konkrete Antwort. – Jacob
Was bedeutet "eine Liste von Formen sortieren"? Woher wissen wir, warum Sie es tun? Ohne weitere Informationen kann keine vernünftige Antwort gegeben werden. – John3136