gpt4 book ai didi

java - 如何将此排序方法转换为 Java 中的通用方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:10 24 4
gpt4 key购买 nike

这个问题有点长...所以请耐心等待。

我必须转换我的书中介绍的用于对数组进行排序的 SelectionSort 方法,并使其通用,以便我可以在其中输入 double 或整数并使其工作。

它似乎不允许通用数组,所以我尝试使用 ArrayList。这里的问题是因为 int 和 double 现在在 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) {

}

}

如您所见...我在新类(class)中的排序或交换没有任何运气。我无法让它工作。我的说明暗示我应该在我的排序方法中使用 >...但没有任何东西让我能够使用 .compareTo() 方法。

这是我书中的实际指令:根据图 19.6 和 19.7 的排序程序编写一个泛型方法 selectionSort(这是我上面给出的代码)。编写一个测试程序,输入、排序和输出一个 Integer 数组和一个 Float 数组。提示:在方法 selectionSort 的类型参数部分使用 >,这样您就可以使用方法 compareTo() 来比较 T 所代表的类型的对象。

有人可以在这里给我一些指导吗?谢谢。

最佳答案

看来你是泛型的新手。如果您希望程序像您编写的那样,我可以指出一些错误,您可以改进这些错误,然后尝试运行您的程序。

在您将类定义为的第三个代码 list 中

SelectionSort <T>

声明

private Array<T> numbers; 

不正确,因为您不需要这个 Array 类,您可以改用以下内容:

private List<T> numbers; 

此外,将新的 selectionSort() 泛型方法声明为

没有意义
public <T extends Comparable<T>> selectionSort() {

您真的希望 Comparable 或其子类成为返回类型吗?不,您希望返回一个 T 列表作为选择排序过程的输出。

如果您还有任何疑问,请返回。

乐于助人达拉姆

关于java - 如何将此排序方法转换为 Java 中的通用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437120/

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