尝试按重量对这些Pet对象排序时,当前出现错误。我敢肯定这很简单,但是我看不出为什么这个比较不起作用。



ArrayListNoDups类

import java.util.*;
import java.util.Collections;
import java.util.Comparator;
import java.lang.Object;

public class ArrayListNoDups {
    public static void main(String[] args) {
        ArrayList<Pet> list = new ArrayList<Pet>();
        String name;
        Integer age;
        Double weight;
        Scanner keyboard = new Scanner(System.in);
        System.out.println("If you wish to stop adding Pets to the list, please put a 0 for all 3 fields.");

        do {
            System.out.println("Enter a String for Pet name: ");
            name = keyboard.next();
            System.out.println("Enter an int for Pet age: ");
            age = keyboard.nextInt();
            System.out.println("Enter a double for Pet weight: ");
            weight = keyboard.nextDouble();

            if (name.length() > 0 && age > 0 && weight > 0)
                list.add(new Pet(name, age, weight));
        } while (name.length() > 0 && age > 0 && weight > 0);

        System.out.println("Your list sorted by WEIGHT ========================= ");
        Collections.sort(list, Pet.SortByWeight);
        for (Pet p2 : list)
            p2.writeOutput();

    }
}

宠物课
import java.util.*;

public class Pet {
    private String name;
    private Integer age; // in years
    private double weight; // in pounds

    public void writeOutput() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age + " years");
        System.out.println("Weight: " + weight + " pounds");
    }

    public void set(String newName) {
        name = newName;
        // age and weight are unchanged.
    }

    public void set(int newAge) {
        if (newAge <= 0) {
            System.out.println("Error: illegal age.");
            System.exit(0);
        } else
            age = newAge;
        // name and weight are unchanged.
    }

    public void set(double newWeight) {
        if (newWeight <= 0) {
            System.out.println("Error: illegal weight.");
            System.exit(0);
        } else
            weight = newWeight;
        // name and age are unchanged.
    }

    public Pet(String name, int age, double weight) {
        this.name = name;
        this.age = age;
        this.weight = weight;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public double getWeight() {
        return weight;
    }

    public static Comparator<Pet> SortByWeight = new Comparator<Pet>() {
        public double compare(Pet pet1, Pet pet2) {
            return pet1.getWeight() - pet2.getWeight();
        }
    };
}

最佳答案

compare接口(interface)的Comparator方法返回int,而不是double

改变:

public double compare(Pet pet1, Pet pet2)

至:
public int compare(Pet pet1, Pet pet2)

比较器如下所示:
public static Comparator<Pet> SortByWeight = new Comparator<Pet>() {
    public int compare(Pet pet1, Pet pet2) {
        return (int)(pet1.getWeight() - pet2.getWeight());
    }
};

关于java - 使用Comparator对ArrayList排序对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29891460/

10-11 23:15