我将如何重新制作compareTo方法?

时间:2014-03-16 23:43:26

标签: java compareto

我有

public int compareTo(Object other)
{


}

我需要能够比较两组不同的数字和相应位置的数字。 例如:

Time t1 = new Time(17, 12);
System.out.println(t1);

Time t2 = new Time(9, 45);
System.out.println(t2);
System.out.println("Greater Than:");
System.out.println(t1.compareTo(t2));

输出将是

1712
0945
Greater Than:
1

在时间类中,第一个数字是小时,第二个数字是分钟。我需要帮助比较这两个数字。

我的时间班使用

public Time (int y, int x)
{
minute = x;
hour = y;
if (minute>59 || minute<0)
{
 minute = 0; 
}
if (hour>=24 || hour<0)
{
 hour=0; 
}
     

}

我如何将两个新时间对象相互比较?

4 个答案:

答案 0 :(得分:1)

首先使用正确的通用类型实现Comparable接口,例如Comparable<Time> 然后,您就可以访问其他对象的属性。

您的方法现在看起来像这样:

public int compareTo(Time otherTime)
{
  //... compare things here... like:
  return hour.compareTo(otherTime.getHour());
}

这是一个示例,您必须自己实现比较逻辑,因为我不知道这是否是一项任务。

答案 1 :(得分:1)

逻辑没有技术。当你面对17:12时,口头告诉我们你是如何做出比较的。 09:45。如果你能够系统地说出来,那么把它写成代码应该没有问题。

我可以理解你可能是编程中的新手,你甚至不知道编写最简单的代码行。然而在编程世界中,没有人会抓住你的手来写你。你应该试着自己解决它。

我不会直接给你答案。但是,这是类似问题的一个小例子。假设有一个这样的评分系统,其中A1 < A2 < A3 ... < An < B1 < B2 < B3... < C1....

我要做的比较是,首先我将比较字母表部分,如果grade1的字母表大于/小于grade2的字母表,我将不需要关心数字部分,我可以返回-1 / 1根据字母表更小/更大。如果字母表是相同的,那么我需要比较数字部分,并根据结果返回1,-1和0。

然后代码看起来像(半假的代码)

public class Grade implements Comparable {
    char level;  // A,B,C,D
    int sublevel;   // 1,2,3,4

    // ctor, getters/setters etc

    @Override
    public int compareTo(Grade other) {
        // compare the alphabet part
        if (this.level < other.level) {
            return -1;
        } else if (this.level > other.level) {
            return 1;
        }

        // alphabet not larger or smaller, that means equals

        // compare the number part
        if (this.sublevel< other.sublevel) {
            return -1;
        } else if (this.sublevel> other.sublevel) {
            return 1;
        } else {  // alphabet and number part are all equals
            return 0;
        }
    }
}

如果您能够理解这里发生的事情,那么实施您的问题应该没有问题。 (当然,有更简洁,更清晰的方式来实现这一点。但我认为你需要的是先学习基础知识)

答案 2 :(得分:0)

所以你的课是时间,我假设它有2个变量,一个用于分钟,一个用于秒。您需要比较的是t1.minutes到t2.minutes和t1.seconds到t2.seconds。但是,您的代码缺少很多部分,它无法帮助我们正确回答您的问题。

答案 3 :(得分:0)

您可以在Time类上使用比较器接口。 Doc:http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

网上应该有很多例子。