第一个代码块在我的主程序中的一个静态方法中。
在这个主程序中,我设置了多边形,它们的区域也在我稍后打印出来的 getArea() 方法中找到,但我在打印数据后使用这个 setArea() 方法来测试 compareTo() 方法。
第二个块是我在实现可比较的 Polygon 类中覆盖的 compareTo。
为什么 setArea() 方法不更新区域?
我认为这可能是一个静态问题,但不确定?
public static void printPolyData(){
try{
for(int i=0;i<=poly_count-1;i++){
System.out.println("polygon #" + (i+1));
System.out.println(poly_list.get(i).getSides() + " sides");
System.out.println(poly_list.get(i).arrayToString());
System.out.println("Area of Polygon = " + poly_list.get(i).getArea());
System.out.println("Area of Polygon = " + poly_list.get(i).dListToString());
}
poly_list.get(0).setArea(0.00090);
poly_list.get(1).setArea(0.00094);
poly_list.get(2).setArea(0.000901);
System.out.println("Comparing polygon0 (Area="
+ poly_list.get(0).getArea() + ") with polygon1 (Area="
+ poly_list.get(1).getArea() + ") : " +
+ poly_list.get(0).compareTo(poly_list.get(1)));
System.out.println("Comparing polygon1 (Area="
+ poly_list.get(1).getArea() + ") with polygon0 (Area="
+ poly_list.get(0).getArea() + ") : " +
+ poly_list.get(1).compareTo(poly_list.get(0)));
System.out.println("Comparing polygon0 (Area="
+ poly_list.get(0).getArea() + ") with polygon2 (Area="
+ poly_list.get(2).getArea() + ") : " +
+ poly_list.get(0).compareTo(poly_list.get(2)));
}
catch (Exception e){
System.out.println("error printing polygon data. " + e.getMessage());
}
}
@Override
public int compareTo(Polygon otherPoly) {
double otherPolysArea = otherPoly.getArea();
final double error = 0.00005;
// otherPoly is bigger. current polygon smaller.
if((this.getArea() - otherPolysArea) < -error){
return -1;
}
// otherPoly is smaller. current polygon bigger.
else if((this.getArea() - otherPolysArea) > error){
return 1;
}
else{return 0;} // polygons are considered same.
}
public void setArea(double area){
this.area = area;
}
比较多边形0(面积=2.0)和多边形1(面积=1.0):1
比较多边形1(面积=1.0)和多边形0(面积=2.0):-1
比较多边形0(面积=2.0)和多边形2(面积=1.5):1