I get the following error:
Comparison method violates its general contract!
This is my compareTo method
public int compareTo(ComparableItem another) {
if (this.score == another.score)
return this.getItemName().compareTo(another.getItemName());
else if ((this.score) > another.score)
return 1;
else
return -1;
}
I want to compare the scores of the items. But when the scores are the same I want to sort them by name.
What do I need to change and why do I get this error?
EDIT:
score is an int
, itemname a String
.
This is the ComparableItem class:
public abstract class ComparableItem extends MenuListItem implements Comparable<ComparableItem> {
protected int score;
public ComparableItem(String itemID, String itemName) {
super(itemID, itemName);
}
public int compareTo(ComparableItem another) {
if (this.score == another.score)
return this.getItemName().compareTo(another.getItemName());
else if ((this.score) > another.score)
return 1;
else
return -1;
}
public abstract boolean found(String criteria);
And this is the MenuListItem class :
public class MenuListItem {
private String itemID,itemName;
public MenuListItem(String itemID, String itemName){
setItemID(itemID);
setItemName(itemName);
}
public String getItemID() {
return itemID;
}
public void setItemID(String itemID) {
this.itemID = itemID;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
@Override
public String toString() {
return this.itemName;
}