亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用冒泡排序和可比較的數組列表對矩形區域進行排序

使用冒泡排序和可比較的數組列表對矩形區域進行排序

HUH函數 2024-01-28 17:04:19
我正在構建之前的程序,該程序使用排序算法對數組中的整數進行排序。我現在的任務是創建一個矩形的 ArrayList,創建一個擴展 Comparable 接口的 Rectangle 類,并在我的排序方法中實現泛型。最后,程序需要對給定的 10 個不同矩形的面積值進行計算和排序。我遇到的問題是,我不確定如何修改排序算法來實現泛型,并使用我在 Rectangle 類中創建的compareTo/方法。getArea我對所有這些概念都相當陌生,所以我的理解是有限的。以下是我如何創建 10 個矩形的 ArrayList 的片段(按降序值排列):public static void main(String[] args) {    ArrayList<Rectangle> list = new ArrayList<>();    for (int i=10;i>=1;i--) {        Rectangle rectangle = new Rectangle((i+5)*2,(i+7)*6);        list.add(rectangle);    }    ...}這是我的 Rectangle 類,它擴展了 Comparable 接口并具有重寫的 CompareTo 方法:class Rectangle implements Comparable<Rectangle> {    double width=1;    double height=1;    public Rectangle() { }    public Rectangle(double recWidth, double recHeight) {        this.width = recWidth;        this.height = recHeight;    }    public double getWidth() {        return width;    }    public void setWidth(double width) {        this.width = width;    }    public double getHeight() {        return height;    }    public void setHeight(double height) {        this.height = height;    }    public double getArea() {        return width * height;    }    @Override    public int compareTo(Rectangle r) {        if (getArea() > r.getArea()) {            return 1;        }        else if (getArea()<r.getArea()) {            return -1;        }        else {            return 0;        }       }    ...}這是我目前的冒泡排序方法,該方法不再起作用。public static <R extends Comparable <Rectangle>> void bubbleSort(ArrayList<Rectangle> list) {    for (int k = 1; k < list.size();k++) {        for (int i = 0; i <list.size()-k; i++) {                R elem = list.getArea();             R elem2 = list.getArea(i+1);             if (elem.compareTo(elem2) >= 1) {                 R temp = list.get(i);                     list.set(i, list.get(i+1));                  list.set(i+1, temp);              }         }         printList(list);    }
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

getArea()您正在嘗試調用對象的方法ArrayList<>。然而,該類ArrayList<>沒有這樣的方法。無法撥打電話

R elem = list.getArea();

list是 類型時ArrayList<>

實際上,您根本不需要調用getArea()冒泡排序方法。冒泡排序方法只關心列表中是否包含實現該Comparable接口的對象。您的方法聲明應更改為:

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

這樣你就可以說:“列表必須包含通用類型的對象R,其中類R實現了Comparable<R>接口”。當您在腦海中替換R為您的Rectangle班級時,您會發現您的班級Rectangle implements Comparable<Rectangle>符合該要求。

在您的冒泡排序方法中,您不再使用該getArea()方法(您不能),而只能使用來自 的方法以及接口提供的ArrayList<>方法。您的代碼應如下所示:compareTo()Comparable<>

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);


    }

}

您正在使用get(i)和get(i+1)來獲取您想要檢查的對。然后在if()語句中您只需交換位置即可。


查看完整回答
反對 回復 2024-01-28
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號