J
JavaMan123
Gast
Hallo Leute,
es handelt sich um die folgenden 2 Klassen ...
also da ja die Klasse Object nicht das Interface Comparable implementiert, ist die Methode isSorted() und insertSorted() fehlerhaft
( diese methoden sind für das Sortieren von Binärbäumen zuständig)
Mein Problem, ich weiß nicht wie ich den Typcast in die Methoden anbringen soll, denn um die Datenwerte mittels compareTo() vergleichen zu können, müssen diese zunächst mittlels Typecast in Objekte vom Typ Comparable umgewandelt werden
Das Problem ist ja auch, dass wir Datenobjekte vom Typ String mittels compareToIgnoreCase() vergleichen andere Datenobjekte jedoch mittels compareTo()
Der normale Typecast ist mir bekannt z.B. von double in int ....aber diese Problem bekomm ich einfach nicht gelöst
Kann mir bitte einer helfen?
mfg
es handelt sich um die folgenden 2 Klassen ...
Java:
package edu.hm.cs.swe2.bintreeobject;
import edu.hm.cs.swe2.bintree.base.GeometricFigure;
public class BinTreeNodeObject {
// versteckte Klassenattribute
private Object value;
private BinTreeNodeObject left;
private BinTreeNodeObject right;
// Custom-Konstruktors
public BinTreeNodeObject(Object value) {
this.value = value;
this.left = null;
this.right = null;
}
public BinTreeNodeObject(Object value, BinTreeNodeObject left,
BinTreeNodeObject right) {
this.value = value;
this.left = left;
this.right = right;
}
/*
* Private Prefix- Infix- und PostfixMethoden, um die Binärbaume in
* verschiedenen Reihenfolgen auszugeben, da diese für andere Klassen nicht
* sichtbar sind werden sie mittels einer anderen Methode aufgerufen (in
* unserem Fall in der Methode "printTreeViewVariants()"
*/
private void printPrefixOrder() {
System.out.print(value + " ");
if (left != null)
left.printPrefixOrder();
if (right != null)
right.printPrefixOrder();
}
private void printInfixOrder() {
if (left != null)
left.printInfixOrder();
System.out.print(value + " ");
if (right != null)
right.printInfixOrder();
}
private void printPostfixOrder() {
if (left != null)
left.printPostfixOrder();
if (right != null)
right.printPostfixOrder();
System.out.print(value + " ");
}
// private Methode, die von außen nicht sichtbar ist,
// allerdings wird diese Methode, welche für das graphische
// Gerüst zuständig ist mittels der öffentlichen Methode
// "printTreeViewVariants()" ausgegeben
private void printTreeView(String prefix) {
System.out.println(prefix + "-" + value);
if (left != null)
left.printTreeView(prefix.concat(" |"));
else
System.out.println(prefix + " |-");
if (right != null)
right.printTreeView(prefix.concat(" "));
else
System.out.println(prefix + " -");
}
// Methode zum ausgeben der Binärbaumordnungen
// und des graphischen Gerüsts
public void printTreeViewVariants() {
StringBuilder s;
if (isSorted())
s = new StringBuilder("sortierter");
else
s = new StringBuilder("unsortierter");
s.append(" Baum:");
/*
* s.append(" "); s.append(value.getClass().getCanonicalName());
* s.append("-Baum:");
*/
System.out.println();
System.out.println("Prefix-Ordnung, " + s);
printPrefixOrder();
System.out.println();
System.out.println();
System.out.println("Postfix-Ordnung, " + s);
printPostfixOrder();
System.out.println();
System.out.println();
System.out.println("Infix-Ordnung, " + s);
printInfixOrder();
System.out.println();
System.out.println();
System.out.println("Baumdarstellung, " + s + ": ");
printTreeView("");
System.out.println();
System.out
.println("---------------------------------------------------------------------");
System.out.println();
}
// Hier wird getestet, ob ein bestimmter Wert
// bereits im Binärbaum enthalten ist
public void insertSorted(Object newValue) {
if (newValue.compareTo(value) < 0) {
if (left == null)
left = new BinTreeNodeObject(newValue);
else
left.insertSorted(newValue);
} else if (newValue.compareToIgnoreCase(value) == 0) {
System.out
.println("Der Wert "
+ newValue
+ " ist schon im Baum enthalten, wird nicht nochmal eingefügt!");
} else {
// newValue > value
if (right == null)
right = new BinTreeNodeObject(newValue);
else
right.insertSorted(newValue);
}
}
// Methode, welche überprüft, ob der Binärbaum sortiert ist
public boolean isSorted() {
if (left == null) {
if (right == null)
return true;
else if (right.getValue().compareToIgnoreCase(value) < 0)
return false;
else
return right.isSorted();
} else if (right == null) {
// left != null
if (left.getValue().compareToIgnoreCase(value) > 0)
return false;
else
return left.isSorted();
} else {
// left != null && right != null
if (left.getValue().compareToIgnoreCase(value) > 0
|| right.getValue().compareToIgnoreCase(value) < 0)
return false;
else
return left.isSorted() && right.isSorted();
}
}
// Getter-Setter-Methoden
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public BinTreeNodeObject getLeft() {
return left;
}
public void setLeft(BinTreeNodeObject left) {
this.left = left;
}
public BinTreeNodeObject getRight() {
return right;
}
public void setRight(BinTreeNodeObject right) {
this.right = right;
}
}
Java:
package edu.hm.cs.swe2.bintreeobject.nodes;
public abstract class GeometricFigure implements Comparable {
public abstract double calculateArea();
public abstract double calculateCircumference();
public abstract int getNumberOfVertices();
public int compareTo(Object newValue) {
if (this.equals(newValue)) {
return 0;
} else {
if (newValue instanceof GeometricFigure) {
GeometricFigure typeCast = (GeometricFigure) newValue;
if (Math.abs(this.calculateArea() - typeCast.calculateArea()) < Double.MIN_NORMAL) {
if (this.getNumberOfVertices() == typeCast
.getNumberOfVertices()) {
if (this.calculateCircumference() <= typeCast
.calculateCircumference()) {
return -1;
} else
return 1;
}
} else {
if (this.calculateArea() < typeCast.calculateArea()) {
return -1;
} else {
return 1;
}
}
if (this.getNumberOfVertices() < typeCast
.calculateCircumference()) {
return -1;
} else {
return 1;
}
}
else
{
System.out.println("Fehler");
return -99;
}
}
}
}
also da ja die Klasse Object nicht das Interface Comparable implementiert, ist die Methode isSorted() und insertSorted() fehlerhaft
( diese methoden sind für das Sortieren von Binärbäumen zuständig)
Mein Problem, ich weiß nicht wie ich den Typcast in die Methoden anbringen soll, denn um die Datenwerte mittels compareTo() vergleichen zu können, müssen diese zunächst mittlels Typecast in Objekte vom Typ Comparable umgewandelt werden
Das Problem ist ja auch, dass wir Datenobjekte vom Typ String mittels compareToIgnoreCase() vergleichen andere Datenobjekte jedoch mittels compareTo()
Der normale Typecast ist mir bekannt z.B. von double in int ....aber diese Problem bekomm ich einfach nicht gelöst
Kann mir bitte einer helfen?
mfg