I am currently getting an error while trying to sort these Pet objects by weight. I am sure this is something simple, but I do not understand why this comparison does not work.
Error: return type is incompatible with java.util.Comparator.compare (Pet, Pet)
Class 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(); } }
Class pet
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(); } }; }
source share