Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较法是如何工作的?_Java - Fatal编程技术网

Java 比较法是如何工作的?

Java 比较法是如何工作的?,java,Java,程序按升序对数组排序,但在return语句中交换id和compareid时,数组按降序排序,但对System.out.println(e[1].compareTo(e[0])的输出没有影响在这两种情况下都返回1。为什么会这样 package example; import java.util.Arrays; class Example implements Comparable<Example> { int id; public int compareTo(Ex

程序按升序对数组排序,但在return语句中交换
id
compareid
时,数组按降序排序,但对
System.out.println(e[1].compareTo(e[0])的输出没有影响
在这两种情况下都返回
1
。为什么会这样

package example;

import java.util.Arrays;

class Example implements Comparable<Example> {
    int id;

    public int compareTo(Example ob) {
        int compareid = ob.id;
        return Integer.compare(id, compareid); // problem
    }
}

class comparableinterface {
    public static void main(String args[]) {
        Example e[] = new Example[3];
        e[0] = new Example();
        e[0].id = 2;
        e[1] = new Example();
        e[1].id = 3;
        e[2] = new Example();
        e[2].id = 0;
        Arrays.sort(e);
        for (Example temp : e) {
            System.out.println(temp.id);
        }
        System.out.println(e[1].compareTo(e[0]));
    }
}
包示例;
导入java.util.array;
类示例实现了可比较的{
int-id;
公共整数比较(示例ob){
int compareid=ob.id;
返回整数。比较(id,compareid);//问题
}
}
类可比接口{
公共静态void main(字符串参数[]){
示例e[]=新示例[3];
e[0]=新示例();
e[0].id=2;
e[1]=新示例();
e[1].id=3;
e[2]=新示例();
e[2].id=0;
数组。排序(e);
例如(例如temp:e){
系统输出打印项次(温度id);
}
System.out.println(e[1].compareTo(e[0]);
}
}

因为比较是在对数组和数组进行排序后执行的。排序(e)会更改数组e的内容

移动


排序之前,它将按您预期的方式运行。

因为在对数组和数组进行排序之后,将执行比较。排序(e)更改数组e的内容

移动


排序前,它将按您预期的方式运行。

比较的结果反映了对象和参数之间的特定顺序。在排序数组中,第一个和第二个之间的值始终为+1,根据compareTo表示的内容进行排序


它不是数字关系的表示

比较的结果反映了对象和参数之间的某种顺序。在排序数组中,第一个和第二个之间的值始终为+1,根据compareTo表示的内容进行排序


它不是数字关系的表示

因为为了对数组进行升序/降序排序,您还将
示例中的
compareTo
方法更改为(即,您将compareTo方法中的逻辑交换)。这就是为什么它在
System.out.println(e[1].compareTo(e[0])中给出相同的结果。基本上,在更改后,您的
compareTo
不再检查“更小”,而是检查“更大”。所以即使
System.out.println(e[1].compareTo(e[0])
在两种情况下都返回1,第一种情况下它告诉您“e[1]大于e[0]”,第二种情况下它告诉您“e[1]小于e[0]”。这有点棘手,想想看

因为为了对数组进行升序/降序排序,您还将
示例中的
compareTo
方法更改为(即,您将compareTo方法中的逻辑交换)。这就是为什么它在
System.out.println(e[1].compareTo(e[0])中给出相同的结果。基本上,在更改后,您的
compareTo
不再检查“更小”,而是检查“更大”。所以即使
System.out.println(e[1].compareTo(e[0])
在两种情况下都返回1,第一种情况下它告诉您“e[1]大于e[0]”,第二种情况下它告诉您“e[1]小于e[0]”。这有点棘手,想想看

您正在重写的
比较(示例ob)
方法中使用,仅供参考

Integer.compare(id,compareid)如果id==compareid,则返回值0;如果idcompareid,则该值大于0

在对数组进行排序后,调用
compareTo(示例ob)
,这就是为什么该方法总是返回
1

在对数组进行排序之前,请尝试调用
compareTo(示例ob)

您正在重写的
compareTo(示例ob)
方法中使用,仅供参考

Integer.compare(id,compareid)如果id==compareid,则返回值0;如果idcompareid,则该值大于0

在对数组进行排序后,调用
compareTo(示例ob)
,这就是为什么该方法总是返回
1

在对数组排序之前,尝试调用
compareTo(示例ob)

比较法被称为自然比较法

C类的自然顺序与 等于当且仅当e1.compareTo(e2)==0具有相同的布尔值时 对于C类的每一个e1和e2,等于(e2)

另请参阅java.utils.Arrays.mergeSort()源代码,了解如何使用compareTo对数组进行排序:

for (int j=i; j>low &&
             ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
                    swap(dest, j, j-1);
比较法被称为自然比较法

C类的自然顺序与 等于当且仅当e1.compareTo(e2)==0具有相同的布尔值时 对于C类的每一个e1和e2,等于(e2)

另请参阅java.utils.Arrays.mergeSort()源代码,了解如何使用compareTo对数组进行排序:

for (int j=i; j>low &&
             ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
                    swap(dest, j, j-1);

应该对整数的实例调用compareTo()方法,而不是静态compare()方法

试试这个:

int id;
public int compareTo(Example ob) {

        Integer compareid = ob.id;
        return compareid.compareTo(id);
    }

应该对整数的实例调用compareTo()方法,而不是静态compare()方法

试试这个:

int id;
public int compareTo(Example ob) {

        Integer compareid = ob.id;
        return compareid.compareTo(id);
    }

我认为这是这里为数不多的正确答案之一。我的答案中也有同样的意思,所以我认为这是这里为数不多的正确答案之一。我在我的回答中也有同样的意思,所以我的答案是+1。真的吗?我得到输出:3 2 0 1-然后进程终止OK它正在调用Integer类的compareTo方法:)真的吗?我得到输出:3 2 0 1-然后进程终止OK它正在调用Integer类的compareTo方法:)