Java中的compareTo(K)方法如何真正起作用?

时间:2017-08-06 16:20:37

标签: java compareto

我对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(例如)是否正常。

3 个答案:

答案 0 :(得分:2)

您的问题:

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

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

示例:

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

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

int sol = intA.compareTo(intB);

但是在比较int而不是包装类时,你应该只使用这样的语法:

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

它更简单易懂。

compareTo方法的背景:

compareTo方法的作用是返回小于,等于或大于0的值。您可能已经知道了。但是,compareTo方法是Comparable<E>界面的一部分,意味着工作原理取决于实施

某些类(例如intString)已经实现了Comparable<E>接口,这意味着他们有自己的方式来使用compareTo方法......

字符串的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;
   }
}

答案 1 :(得分:0)

返回值&gt; 0如果第一个对象&#34;更大&#34;比第二个,0如果是&#34;等于&#34;和&lt; 0,如果是&#34; less&#34;。

我使用引号标记对象,你需要告诉java如何定义什么&#34;更高&#34;什么&#34;少&#34;使用Comparator对象。

答案 2 :(得分:0)

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