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

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

Java:如何在具有多個類的同時比較數組中的對象

Java:如何在具有多個類的同時比較數組中的對象

慕田峪7331174 2022-05-12 15:11:18
這是我的問題。我有 3 個類:一個叫做 Pets,一個 Pet 和一個 PetActions。在我的寵物類中,我有三個變量:字符串名稱、int 重量、int 高度和構造函數。在我的 PetAction-Class 中,我有我的主要方法。在其中我正在創建 5 個寵物對象Pet cat = new Pet ("cat", 4, 25);Pet dog = new Pet ("dog", 24, 58);Pet bird = new Pet("bird" , 0.3, 18);Pet snake = new Pet("snake", 2, 150);Pet rabbit = new Pet ("rabbit", 2, 40);這些我打包在一個寵物陣列中Array[] pets = {cat, dog, bird, rabbit, snake};我用來創建寵物對象Pets pets = new Pets(pets);我的寵物類看起來像這樣:public class Pets{    Pet[] pets;    public Pets(Pet[] pets){        this.pets = pets;    }       public int position(Pet pet) {        Pet[] sortedPets;        // search in sortedPets pet        return position;    }    public Verein getPetFromString(String s) {        return ;    }現在,在我的 PetAction - 類中,我問用戶他想知道哪個動物的位置(它們應該從輕到重排序,如果兩個重量相同,它會檢查體重和身高之間的關系),我的問題來了。我只是不明白這應該如何正常工作。我知道我必須使用 Comparable 和 Comporator (至少這是我在網上閱讀的內容),但我無法正確地舉個例子并繼續它。也可能是語言不通的緣故。有人可以幫我嗎?(:
查看完整描述

2 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

首先,您為您的寵物類實現 Comparable 接口,并向您的 Pet 類添加一個比較方法,該方法返回一個整數(如果此寵物大于其他寵物,則返回一個整數(+ve),否則為負數。


class Pet implements Comparable{

    String name;

    int weight;

    int height; 

    public int compareTo(Pet otherPet){  

        if(weight > otherPet.weight){

            return 1;

        }

        else if(weight = otherPet.weight){

            if(height > otherPet.height){

                return 1;

            }

        }

        else{

         return -1;

        }

    }

}

實現該接口可讓您使用此行對數組進行排序


Collections.sort(Pets);


查看完整回答
反對 回復 2022-05-12
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

選項 1:使用自定義比較器

如果要對Pet數組進行排序pets,可以使用Array.sort()并提供Comparator:


Arrays.sort(pets, Comparator.comparing(Pet::getWeight).thenComparing(Pet::getHeight));

我假設你有體重和身高的吸氣劑。

如果兩只寵物的重量相同,這會將您的陣列從最輕到最重以及從最小到最高排序。


您可以在Pets構造函數中調用它:


public Pets(Pet[] pets){

    Arrays.sort(pets, ...);

    this.pets = pets;

}

選項 2:實現 Comparable 接口

或者,您可以修改您的類以實現Comparable并實現方法 CompareTo():


public class Pet implements Comparable<Pet>{


    ...


    @Override

    public int compareTo(Pet o) {

        int result = Integer.compare(this.height, o.height);

        if(result != 0) return result;

        else return Integer.compare(this.weight, o.weight);

    } 

}

然后你可以簡單地調用:


Arrays.sort(pets)


查看完整回答
反對 回復 2022-05-12
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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