java - 如何在以泛型数组作为参数的泛型方法中实现 compareTo?
问题描述
我正在尝试实现一个方法,给定一个通用数组和两个索引值,对数组进行切片,并找到两个给定数字之间的最大元素。
<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],只正确交换了前两个元素,给了我错误的最大元素。代码有什么问题?
解决方案
你的排序有两个问题。第一个是您正在使用firstIndx
and secondIndx
,但根据您的代码结构,它将第二个数字视为第二个索引减 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
。
推荐阅读
- json - Change structure of JSON data for API POST request with Django
- python - 在向量中查找连续且相同的整数
- python - 根据元素位置编写 PDF
- javascript - 在 React APP 上将 HTML 脚本附加到 DOM
- .net - 处理 WCF 故障消息
- ios - WKWebView 的 pageCount 不正确;这可以纠正或完全删除吗?
- javascript - 将 mp3 文件夹变成可搜索的组件
- c# - 多目标 .net core 2.2 和 .net 4.6.1
- java - 通过反射将 Java POJO 转换为 Avro 模式的 Maven 插件
- python - 没有被删除的行