Java 中的 compareTo(K) 方法究竟是如何工作的?

How does the compareTo(K) method in Java really work?

我是 Java 的新手,所以我需要你们的一些意见。

我正在尝试使用 compareTo() Java 方法,它在比较一位数字时工作正常,但在将一位数字与多于一位的数字进行比较时,它不起作用'没有按预期工作。这是一个例子:

data[0] = 10;
data[1] = 5;

Input : if( data[0].compareTo(data[1]) > 0)
        then swap (using temp)

output: data[0] = 10
        data[1] = 5

请注意,如果 data[0] = 8(例如)它工作正常。

您的问题:

您正在使用 compareTo,这是一种 方法 。您可能没有意识到这一点,但是原始 class int 没有任何方法。它的所有方法都包含在包装器 class Integer 中。当尝试从 int 调用方法时,您一定会 运行 遇到这样的问题。

因此,当使用 compareTo 时,您必须比较两个整数对象。

示例:

Integer intA = new Integer("10");
Integer intB = new Integer("25");

一旦你有了实际的整数对象,你就可以使用compareTo方法...例如:

int sol = intA.compareTo(intB);

但是当比较 int 而不是包装器 class 时,你真的应该使用这样的语法:

int intA = 5;
int intB = 10;
int sol = intA-intB;

更简单易懂。

compareTo 方法的背景:

compareTo 方法所做的是 return 小于、等于或大于 0 的值。您可能已经知道。但是,compareTo 方法是 Comparable<E> 接口的一部分,这意味着 它的工作方式取决于实现

一些 classes,例如 intString 已经实现了 Comparable<E> 接口,这意味着它们有自己的方式来利用 compareTo方法...

String 的 compareTo 方法对单个字符串使用数字表示...我不知道它是如何计算这些值的,但它是按字母顺序计算的。因此对于字符串,以 A 开头的单词的值将小于以 B 开头的单词的值。

对于整数,compareTo 方法非常简单,因为它们已经有了数值。

如果您想了解更多关于 Comparable<E> 界面的信息,这里有一个小例子:

public class Weight implements Comparable<Weight>
{
   private int myPounds, myOunces;

   public Weight()
   {
      myPounds = myOunces = 0;
   }
   public Weight(int x, int y)
   {
      myPounds = x;
      myOunces = y; 
   }

   public int getPounds()
   {
      return myPounds;
   }
   public int getOunces()
   {
      return myOunces;
   }

   public int compareTo(Weight w)
   {
      if(myPounds<w.getPounds())
         return -1;
      if(myPounds>w.getPounds())
         return 1;
      if(myOunces<w.getOunces())
         return -1;
      if(myOunces>w.getOunces())
         return 1;
      return 0;
   }
}

如果第一个对象 "greater" 比第二个对象 returns 值 > 0,如果是 "equals" 则为 0 并且如果是 "less".[=11 则 < 0 =]

我用引号来标记对象,你需要告诉 java 如何定义什么是 "greater" 什么是 "less" 使用 Comparator 对象。

谢谢你的回答。我想我已经弄清楚我的程序出了什么问题。输入被保存为字符串,所以我需要在使用 compareTo 方法之前使用 Integer.parseString 方法。这就是为什么在比较 10 和 5 时.. 10 先于 5