Привет, у меня проблемы с реализацией метода compareTo. Я искал ответы, но ничего не помогло. Я пытаюсь заполнить TreeSet кругами разного размера. Мне нужно compareTo в моем классе круга, чтобы иметь возможность хранить их таким образом.
import java.util.*;
import java.lang.*;
abstract class Shape
{
private String name; //e.g."circlel", "rectangle3"
Shape(String name0)
{
name = name0;
}
abstract double area (); // area of shape
abstract double perim(); // length of perimeter of shape
void put()
{ // display shape details
System.out.println(name + " with area " + area()
+ " and perimeter " + perim() );
}
}
class Circle extends Shape implements Comparable
{
private static String name;
private int radius;
Circle(String n, int r)
{
super(n);
radius = r;
}
public double area()
{
return Math.PI * radius * radius;
}
public double perim()
{
return 2 * Math.PI * radius;
}
public int compareTo(Circle c)
{
if(c.name == name && c.radius == radius)
{
return 0;
}
else
{
return 1;
}
}
}
Изменить: спасибо, я кое-что забыл: круг не является абстрактным и не переопределяет абстрактный метод compareTo (Object) в Comparable
Спасибо за помощь в этом, теперь, когда я приступил к тестированию класса, при попытке добавить круг в набор деревьев это исключение всплывает любые идеи,
Exception in thread "main" java.lang.NullPointerException
at Circle.compareTo(Shape.java:47)
at Circle.compareTo(Shape.java:23)
at java.util.TreeMap.compare(Unknown Source)
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at CircleTreeSet.main(CircleTreeSet.java:24)
class Circle extends Shape implements Comparable<Circle>
. Также прочитайте Как сравнивать строки в Java?. Кроме того, в текущей реализации никогда не будет возвращаемого отрицательного значения, которое необходимо для меньших кругов. - person jlordo   schedule 11.08.2013