I'm currently getting an error when attempting to sort these Pet objects by weight. I'm sure it's something simple, but I can't see why this compare isn't working.
Error: The return type is incompatible with java.util.Comparator.compare(Pet, Pet)
ArrayListNoDups class
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();
}
}
Pet class
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
method of Comparator
interface returns an int
, not double
.
Change:
public double compare(Pet pet1, Pet pet2)
to:
public int compare(Pet pet1, Pet pet2)
The Comparator can look like this:
public static Comparator<Pet> SortByWeight = new Comparator<Pet>() {
public int compare(Pet pet1, Pet pet2) {
return (int)(pet1.getWeight() - pet2.getWeight());
}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With