Java 使用具有可比较阵列列表的气泡排序对矩形区域进行排序

Java 使用具有可比较阵列列表的气泡排序对矩形区域进行排序,java,Java,我在上一个程序的基础上进行构建,该程序使用排序算法对数组中的整数进行排序 我现在的任务是创建一个矩形的ArrayList,创建一个扩展可比较接口的矩形类,并在我的排序方法中实现泛型 最后,程序需要计算并排序10个不同矩形的给定面积值 我遇到的问题是,我不确定如何修改排序算法以实现泛型,并使用我在矩形类中创建的compareTo/getArea方法 我对所有这些概念都相当陌生,所以我的理解是有限的 下面是我如何创建10个矩形的ArrayList(降序值)的一个片段: publicstaticvoi

我在上一个程序的基础上进行构建,该程序使用排序算法对数组中的整数进行排序

我现在的任务是创建一个矩形的ArrayList,创建一个扩展可比较接口的矩形类,并在我的排序方法中实现泛型

最后,程序需要计算并排序10个不同矩形的给定面积值

我遇到的问题是,我不确定如何修改排序算法以实现泛型,并使用我在矩形类中创建的
compareTo
/
getArea
方法

我对所有这些概念都相当陌生,所以我的理解是有限的

下面是我如何创建10个矩形的ArrayList(降序值)的一个片段:

publicstaticvoidmain(字符串[]args){
ArrayList=新建ArrayList();
对于(int i=10;i>=1;i--){
矩形=新矩形((i+5)*2,(i+7)*6);
添加(矩形);
}
...
}
这是我的Rectangle类,它扩展了Comparable接口,并具有重写的compareTo方法:

类矩形实现可比较{
双倍宽度=1;
双倍高度=1;
公共矩形(){}
公共矩形(双recWidth,双recHeight){
this.width=recWidth;
this.height=recHeight;
}
公共双getWidth(){
返回宽度;
}
公共空白设置宽度(双倍宽度){
这个。宽度=宽度;
}
公众双倍身高(){
返回高度;
}
公共空间设置高度(双倍高度){
高度=高度;
}
公共区域(){
返回宽度*高度;
}
@凌驾
公共整数比较(矩形r){
if(getArea()>r.getArea()){
返回1;
}

如果(getArea()您试图调用
ArrayList
对象上的方法
getArea()
。但是,类
ArrayList
没有这样的方法。无法调用

R elem = list.getArea();
列表
的类型为
数组列表

实际上,您根本不需要在冒泡排序方法中调用
getArea()
。冒泡排序方法只关心列表中包含实现
Comparable
接口的对象。您的方法声明应更改为:

public static <R extends Comparable <R>> void bubbleSort(ArrayList<R> list)

您正在使用
get(i)
get(i+1)
来获取要检查的对。然后在
if()
语句中,您只需交换位置。

代码中存在很多问题。例如
R elem=list.getArea()
。您需要取出列表中的对象,然后调用getArea(list.get(x).getArea())。下一个问题,泛型被错误地理解。我建议学习java的基础知识。嗨,谢谢你的反馈。我已经相应地调整了冒泡排序方法,它似乎可以根据需要运行。但是,我发现我的程序没有使用Rectangle类中定义的compareTo方法。它只是按Rectangle对象排序,而不是按e每个矩形的面积。(例如,它为列表中的每个矩形打印'rectangle@',后跟一个随机的字母数字字符,并对它们进行排序。)我缺少什么吗?@suppression您的
compareTo()
方法已经在使用
getArea()
方法。您认为它为什么不调用
compareTo())
method?在
compareTo()
方法中编写
System.out.println()语句时会发生什么情况?是否获得任何输出?有关“随机字母数字字符”,请参阅
public static <R extends Comparable <R>> void bubbleSort(ArrayList<R> list)
public static <R extends Comparable <R>> void bubbleSort(ArrayList<R> list) {

    for (int k = 1; k < list.size();k++) {
        for (int i = 0; i <list.size()-k; i++) {   

             R elem = list.get(i);
             R elem2 = list.get(i+1);

             if (elem.compareTo(elem2) > 0) {
                 list.set(i, elem2); 
                 list.set(i+1, elem); 
             }
         }
         printList(list);

    }
}