gpt4 book ai didi

java - 如何在以泛型数组为参数的泛型方法中实现 compareTo?

转载 作者:行者123 更新时间:2023-11-30 07:39:58 25 4
gpt4 key购买 nike

我正在尝试实现一种方法,给定一个通用数组和两个索引值,对数组进行切片,然后找到两个给定数字之间的最大元素。

<T extends Comparable<? super T>> T max(T[] array, int firstIndx, int secondIndx) {        //requires comparable
T maxElement = array[0]; //8
System.out.println(Arrays.toString(array));

for (int i = firstIndx; i < secondIndx - 1; i++) {
for (int j = firstIndx + 1; j < secondIndx; j++) {
if (array[i].compareTo(array[j]) > 0) {
maxElement = array[i];
array[i] = array[j];
array[j] = maxElement;
}
}
}

System.out.println(Arrays.toString(array));
return maxElement;
}

但是对于一个整数数组 [8, 4, 6, 20, 1],只能正确交换前两个元素,给我错误的最大元素。代码有什么问题?

最佳答案

您的排序有两个问题。第一个是您正在使用 firstIndxsecondIndx,但是根据您的代码结构,它会将第二个数字视为第二个索引 减 1

第二个问题是您的内部循环每次都从 firstIndx 开始,这会破坏冒泡排序。它需要从 i 开始。

尝试对您的 for 循环进行此修改:

for (int i = firstIndx; i <= secondIndx - 1; i++) { // Notice the "<=".
for (int j = i + 1; j <= secondIndx; j++) { // j starts at i
// ... existing bubble sort code goes here
}
}

编辑: 我没有提到如果最大值已经在其排序位置,您的方法将找不到最大值。完成排序后,您应该从 array[secondIndx] 中获取最大值。


顺便说一句,firstIndx 是一个非常糟糕的变量名。只差一个字母就完整写出来了:firstIndex

关于java - 如何在以泛型数组为参数的泛型方法中实现 compareTo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58594294/

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