Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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 使用CompareTo比较数组中的字符串和双精度值?_Java_Arrays_Sorting - Fatal编程技术网

Java 使用CompareTo比较数组中的字符串和双精度值?

Java 使用CompareTo比较数组中的字符串和双精度值?,java,arrays,sorting,Java,Arrays,Sorting,我被指派使用插入排序和选择排序对输入值数组进行排序。我在重写项类中的比较方法时遇到了一些问题。我希望对其进行排序,以便如果两个项目的定价相同,则根据类别进行比较。因此,儿童(C)项目首先出现,然后是M,然后是女性。这是我的代码,每次我试图编译它时,我都会收到一个错误,说明不能引用double public int compareTo (Object other) { int result; double otherPrice = ((Item)other).getClo

我被指派使用插入排序和选择排序对输入值数组进行排序。我在重写
类中的
比较
方法时遇到了一些问题。我希望对其进行排序,以便如果两个项目的定价相同,则根据
类别进行比较。因此,儿童(C)项目首先出现,然后是M,然后是女性。这是我的代码,每次我试图编译它时,我都会收到一个错误,说明不能引用
double

public int compareTo (Object other) {
      int result;

      double otherPrice = ((Item)other).getClothPrice();
      String otherCategory = ((Item)other).getClothCategory();

      if (clothPrice == otherPrice)
         result = clothCategory.compareTo(otherCategory);
      else
         result = clothPrice.compareTo(otherPrice);

      return result;
}

首先,您的
compareTo
方法应该将
作为参数。如果这导致编译器错误,请确保
正在实现
可比

要比较基本
值,请使用:

如果您使用的是Java 8,您可能更喜欢使用一些更高级的功能,这些功能使扩展此代码变得更简单:

private static final Comparator<Item> naturalOrdering = Comparator
        .comparingDouble(Item::getClothPrice)
        .thenComparing(Item::getClothCategory);

public int compareTo(Item other) {
    return naturalOrdering.compare(this, other);
}
private static final Comparator naturalOrdering=Comparator
.comparingDouble(项目::getClothPrice)
.然后比较(项目::getClothCategory);
公共整数比较(项目其他){
回归自然法则。比较(这个,其他);
}

我忘了添加可比较的,谢谢你,我最终通过将else改为result=Double.compare(clothPrice,otherPrice)使代码正常工作;“那会完成同样的事情吗?”@TommyHarvey是的,那会完成同样的事情。我刚刚按照大多数人编写代码的方式重写了您的代码。好的,谢谢您,我只是偏离了课堂上给出的示例。非常感谢您的帮助哇,我不知道比较器。谢谢是否应该缓存
Comparator
对象以提高性能,而不是在每次调用
compareTo
时重新实例化该对象?@BasilBourque是的,使用
静态
字段缓存
Comparator
对象会更有效。
private static final Comparator<Item> naturalOrdering = Comparator
        .comparingDouble(Item::getClothPrice)
        .thenComparing(Item::getClothCategory);

public int compareTo(Item other) {
    return naturalOrdering.compare(this, other);
}