首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >compareTo()实现问题

compareTo()实现问题
EN

Stack Overflow用户
提问于 2013-08-11 17:40:26
回答 2查看 1.6K关注 0票数 0

嗨,我在实现compareTo方法时遇到了困难。我一直在寻找答案,但没有任何帮助。我试图用不同大小的圆圈填充TreeSet。我需要循环类中的compareTo才能以这种方式存储它们。

代码语言:javascript
复制
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(对象)。

谢谢你在这方面的帮助,现在我已经开始测试这个类了,当我试着给树增加一个圆圈时,这个例外会弹出任何想法,

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-11 17:46:35

在这种方法中,你永远不会返回-1。如果其中一个圆比另一个圆“大”,那么一个圆应该返回1,而另一个圆圈,如果与大圆比较,则应该返回-1。你必须确保你的圆圈遵循传递性属性和其他一些行军。

看看对compareTo()的引用

票数 3
EN

Stack Overflow用户

发布于 2013-08-11 17:49:34

如果当前实例小于c,则必须返回-1;如果当前实例大于c,则返回1;如果实例相等,则返回0。

这就是compareTo的工作原理。现在,你把它看成是一张平等支票。comparTo所做的还不止这些。它应确定一项是否相等、小于或大于另一项。

此代码将按排序时大小的顺序对同名对象进行分组。对象也将按名称按字母顺序排序。

代码语言:javascript
复制
public int compareTo(Circle c)
{
    if(c.name.equals(name)){
        if(c.radius < radius)
        {
            return 1;
        }
        else if(c.radius>radius)
        {
            return -1;
        }
        return 0;
    }
    //names aren't the same compare alphabetically.
    return this.name.compareTo(c.name);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18174791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档