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,例如 int
和 String
已经实现了 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
我是 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,例如 int
和 String
已经实现了 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