我有一个例子,我对输出感到困惑。

 enum Seasons {
    WINTER,
    SUMMER,
    SPRING,
    AUTUMN;
}
public class SeasonTest{
    public static void main(String[] args) {
    Seasons season1 = Seasons.WINTER;
    Seasons season2 = Seasons.SUMMER;
    Seasons season3 = Seasons.SPRING;
    Seasons season4 = Seasons.AUTUMN;
    System.out.println(season1.compareTo(season2));
    System.out.println(season3.compareTo(season4));
    System.out.println(season4.compareTo(season3));
    System.out.println(season2.compareTo(season1));
    System.out.println(season3.compareTo(season3));
    System.out.println(season1.compareTo(season4));
}
}

最后一行返回-3。 这是为什么? 它应返回-1,因为season1小于season4。 为什么会返回-3?

谢谢。

#1楼 票数:7 已采纳

允许compareTo()返回任何正数或负数或零。

它不需要专门返回+/- 1。

#2楼 票数:3

枚举compareTo()减去序数值,因此在您的情况下为WINTER.ordinal() - AUTUMN.ordinal() = 0 - 3 = -3

#3楼 票数:2

假设元素是整数排序的,

 enum Seasons {
    WINTER,   // 0  \
    SUMMER,   // 1   \
    SPRING,   // 2    \
    AUTUMN;   // 3   --- difference is 3 (subtraction gives -3)
}

#4楼 票数:0

如果您从中调用compareTo()方法的对象(在本例中为enum)大于其中的参数-它会返回一个正整数(1、2,...,323432,实际上无关紧要)

如果相等,则为0

如果调用对象小于参数,则它将小于0(-1,-2 ...等)。

在if语句和布尔值中使用它时,对于较小和较大的情况使用>和<运算符,而不是使用== 1== -1

  ask by benz translate from so

未解决问题?本站智能推荐:

1回复

实现自己的compareTo和compare方法

我正在处理我的编程课程提供的一些旧任务。 我应该创建一个带有一些基本功能的Rectangle类,以及许多Comparable和Comparator类。 这是我已经得到的: 什么叫.compareTo,.equals等方法? 例如,当我得到一些 当实现自己的compareTo方法时
2回复

compareTo()方法的实现问题

基本上,我有2个班级。 其中一个有一个私有成员 ArrayList(来自另一个类的对象),列表中的每个对象都有一个私有字段点。 我有一种方法可以遍历列表并获得所有点的总和。 所以我只想通过它们的总和来比较 list1 > list2 。 但我没能做到——我的 compareTo() 总是返回
3回复

JavaComparable,compareTo()方法的多重/不同实现

我有这门课: 我希望compareTo()使用不同的类属性进行行为或排序,具体取决于是否设置了标志。 所以,如果flag == 1我喜欢compareTo()和使用属性c ,否则是flag == 0 ,无论当前在方法中是什么。 换句话说,以不同的方式对同一个类进行排序。 我不知道
2回复

使用compareTo实现equals方法

一般问题:在Java中实现默认equals方法的覆盖时,我应该关注简单地利用已经实现的compareTo方法与将独立逻辑写入equals方法? 我注意到有人在另一个问题中提到foo.equals((String)null)返回false而String.compareTo((String)nul
4回复

你如何干净地实现compareTo方法?

目前我正在编写一个用于二次函数的compareTo方法,形式为:ax ^ 2 + bx + c。 a,b,c是通过构造函数传递给类的整数系数。 在compareTo方法中,我应该首先比较两个函数之间的a系数,但如果它们相等,我比较b系数。 如果b是相等的,我比较c。 我为此提出的方
1回复

如何使用Token作为参数来实现compareTo方法

我不知道我的教授问他的意思 包含令牌的字符串。 我这样做如下: int compareTo(BSTNode)–比较此对象与参数对象。 首先,比较对象的String成员; 如果它们不相等,则返回适当的值。 如果String 0members相等,则比较int成员并返回适当的值。
4回复

为多个字段实现compareTo方法

我想比较两个基于5元组的对象:srcAddr,dstAddr,srcPort,dstPort,协议 这是我所拥有的: } 但这是行不通的。 它说不能比较两个字符串。 谁能帮我知道问题在哪里吗? 谢谢。
1回复

你如何正确使用String中实现的compareTo方法?

所以我创建了一个雇员对象和一个驱动程序。 驱动程序包含Employees的ArrayList,此特定方法返回名称首先按字母顺序排列的Employee。 让我们将两个Employees添加到ArrayList'staff',并将它们称为“a”和“z”。 出于某种原因,当我希望它返回Emp