这个问题有点长……所以请多多包涵。
我必须转换我书中介绍的用于对数组进行排序的 SelectionSort 方法,并使其具有通用性,以便我可以在其中输入双精度数或整数并使其工作。
它似乎不允许泛型数组,所以我尝试使用 ArrayList。这里的问题是由于 int 和 doubles 现在位于 Integer 和 Double 包装器中,它破坏了 SelectionSort 方法。
我试图修复它,但我没有运气。我将在下面发布原始的 SelectionSort 方法,然后是我正在创建的类和驱动程序。
原始选择排序:
public class SelectionSort {
private int[] data;
private static final Random generator = new Random();
public SelectionSort(int size) {
data = new int[size];
for(int i = 0; i < size; i++) {
data[i] = 10 + generator.nextInt(90);
}
}
public void sort() {
int smallest;
for(int i = 0; i < data.length - 1; i++) {
smallest = i;
for(int index = i + 1; index < data.length; index++) {
if(data[index] < data[smallest]) {
smallest = index;
}
}
swap(i, smallest);
}
}
public void swap(int first, int second) {
int temporary = data[first];
data[first] = data[second];
data[second] = temporary;
}
}
我的简单驱动程序:
public class GenericsDriver {
public static void main(String[] args) {
SelectionSort<Integer> intSort = new SelectionSort<Integer>();
intSort.AddGrade(100);
intSort.AddGrade(90);
intSort.AddGrade(50);
intSort.AddGrade(80);
intSort.AddGrade(95);
intSort.PrintNumbers();
//sort here
intSort.PrintNumbers();
SelectionSort<Double> doubleSort = new SelectionSort<Double>();
doubleSort.AddGrade(100.1);
doubleSort.AddGrade(90.4);
doubleSort.AddGrade(50.7);
doubleSort.AddGrade(100.2);
doubleSort.AddGrade(100.5);
doubleSort.PrintNumbers();
//sort here
doubleSort.PrintNumbers();
}
}
新类和我重新利用 SelectionSort 方法的尝试:
import java.util.*;
public class SelectionSort <T> {
private Array<T> numbers;
public SelectionSort() {
numbers = new ArrayList<T>();
}
public void AddGrade(T number) {
numbers.add(number);
}
public void PrintNumbers() {
System.out.println(numbers.toString());
}
public <T extends Comparable<T>> selectionSort() {
int smallest;
for(int i = 0; i < numbers.size(); i++) {
smallest = i;
for(int index = i + 1; index < numbers.size(); index++) {
if(numbers.) {
//I've tried everything here...
//from using number.get(index), and everything else
//I could think of
}
}
}
}
public void swap(int first, int second) {
}
}
正如你所看到的......我在我的新班级中没有任何排序或交换的运气。我无法让它工作。我的说明提示我应该在我的排序方法中使用 > ......但没有什么能让我能够使用 .compareTo() 方法。
这是我书中的实际指令:根据图 19.6 和 19.7 的排序程序编写一个通用方法 selectionSort(这就是我上面给出的代码)。编写一个测试程序,输入、排序和输出一个整数数组和一个浮点数组。提示:在方法 selectionSort 的 type-parameter 部分使用 >,以便您可以使用方法 compareTo() 来比较 T 表示的类型的对象。
有人可以在这里给我一些指导吗?谢谢。