Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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 无法对原语类型double调用compareTo(double)_Java_Compare_Comparable_Compareto - Fatal编程技术网

Java 无法对原语类型double调用compareTo(double)

Java 无法对原语类型double调用compareTo(double),java,compare,comparable,compareto,Java,Compare,Comparable,Compareto,行返回数组[index1]。比较(数组[index2])提供错误“无法调用原语类型double上的compareTo(double)”。如何解决这个问题 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ /*:: This function implements a comparator of double values :*/ /*:::::::::::::::::::::::::::

返回数组[index1]。比较(数组[index2])提供错误“无法调用原语类型double上的compareTo(double)”。如何解决这个问题

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*::  This function implements a comparator of double values        :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private class ArrayIndexComparator implements Comparator<Integer>
{
    private final double[] array;

    public ArrayIndexComparator(double[] array)
    {
        this.array = array;
    }

    public Integer[] createIndexArray()
    {
        Integer[] indexes = new Integer[array.length];
        for (int i = 0; i < array.length; i++)
        {
            indexes[i] = i; // Autoboxing
        }
        return indexes;
    }

    @Override
    public int compare(Integer index1, Integer index2)
    {
         // Autounbox from Integer to int to use as array indexes
        return array[index1].compareTo(array[index2]);
    }
}


double[] dist = new double[centroids.size()];
// fill array...    
ArrayIndexComparator comparator = new ArrayIndexComparator(dist);
Integer[] indexes = comparator.createIndexArray();
Arrays.sort(indexes, comparator);
/*:*/
/*::此函数实现双值比较器:*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
私有类ArrayIndexComparator实现Comparator
{
私有最终双[]数组;
公共阵列索引比较器(双[]阵列)
{
this.array=数组;
}
公共整数[]createIndexArray()
{
整数[]索引=新整数[array.length];
for(int i=0;i
在java中,基本类型没有任何方法。相反,使用原始数据类型使用包装器类

改变

return array[index1].compareTo(array[index2]);


尝试使用
Double[]数组
而不是
双[]数组

将实例方法的调用
compareTo
替换为的调用,如下所示:

return Double.compare(array[index1], array[index2]);

这使您可以将
双精度
保存在一个基元数组中,并避免在调用实例方法之前自动装箱。

对于基元类型,不要使用
比较,而是使用
=

但是如果您想使用
compareTo
只需创建一个双数组

Double[] dist = new Double[centroids.size()];

comparator无法直接比较基元类型,因为接口仅由collator和RuleBasedCollector实现。没有包装器类实现comparator。由于该编译器将无法自动装箱

只要查看Double类,您就会发现一个内置的方法,它提供了比较方法

公共静态整数比较(双d1,双d2)

返回: 如果d1在数值上等于d2,则值为0;如果d1在数值上小于d2,则值小于0;如果d1在数值上大于d2,则该值大于0


反向:将整个表达式乘以-1

=
不是
compareTo
的等价物,而是
equals
的等价物。要了解更多信息,请访问java文档,并在其中访问包java.lang.Double,这称为包装器类,在Java中,对于每种基本类型,都有相应的包装器类存在于Java.lang包下。这里是文档链接,在这种情况下如何按相反顺序排序?放在哪里,Collections.reverseOrder()?@klausklausos
Collections.reverseOrder()
用于反转自然顺序。由于您使用的是比较器,因此可以通过调用
Double.compare(array[index2],array[index1])
或向构造函数添加一个额外的
boolean isReverseOrder
标志,将其存储在成员变量中,来切换比较器内部的顺序,当设置了
isReverseOrder
时,在
compare
方法中反转比较结果。
Double[] dist = new Double[centroids.size()];