gpt4 book ai didi

java - 将比较器与泛型一起使用

转载 作者:行者123 更新时间:2023-11-30 07:35:23 24 4
gpt4 key购买 nike

我正在尝试使用通用方法对数组进行排序。我在 Lab6Sort(octArr); 上收到一条错误,提示 classname 无法应用于 Shape[]。

 public static void main(String[] args) {
Shape[] octArr = new Shape[10];

for(int i = 0; i < 10; i++){
octArr[i] = new L6MPerRegOct(Math.floor(Math.random() * 1000) / 10);
}

Lab6Sort(octArr);
}
.
.
public static <AnyType> void Lab6Sort (AnyType [] arr, Comparator<? super AnyType> cmp)

看来我需要第二个参数,但我不确定这应该是什么。

完整代码如下:

public class L6MPerRegOct extends Shape {
public static void main(String[] args) {
Shape[] octArr = new Shape[10];

for(int i = 0; i < 10; i++){
octArr[i] = new L6MPerRegOct(Math.floor(Math.random() * 1000) / 10);
}

Lab6Sort(octArr);

}

private double sideLength;

public L6MPerRegOct(double len){
sideLength = len;
}

public double area(){
return 2 * sideLength*sideLength * (1 + Math.sqrt(2));
}
public static <AnyType> void Lab6Sort (AnyType [] arr, Comparator<? super AnyType> cmp)
{
int j, minIndex, n = arr.length;
AnyType temp;

for ( int index = 0; index < n - 1; index++ ) {
minIndex = index;

for (j = index + 1; j < n; j++) {
if (cmp.compare(arr[index], arr[minIndex]) < 0)
minIndex = j;
}

if (minIndex != index) {
temp = arr[index];

arr[index] = arr[minIndex];

arr[minIndex] = temp;
}
}

public abstract class Shape implements Comparable<Shape>
{
public abstract double area( );
public abstract double perimeter( );

public int compareTo( Shape rhs )
{
double diff = area( ) - rhs.area( );
if( diff == 0 )
return 0;
else if( diff < 0 )
return -1;
else
return 1;
}

public double semiperimeter( )
{
return perimeter( ) / 2;
}
}

最佳答案

您需要向其传递一个 Comparator 实例,例如

Lab6Sort(octArr, new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
return 0;
}
});

如果您想重用它,或者在单独的类中定义比较器

public class ShapeComparator implements Comparator<Shape> {
@Override
public int compare(Shape o1, Shape o2) {
return 0;
}
}

关于java - 将比较器与泛型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35464899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com