...
Code Block | ||
---|---|---|
| ||
public final class Card implements Comparable {
private String suit;
private int rank;
public Card(String s, int r) {
if (s == null)
throw new NullPointerException();
suit = s;
rank = r;
}
public boolean equals(Object o) {
if (o instanceof Card){
Card c = (Card)o;
return suit.equals(c.suit) || (rank == c.rank); // bad
}
return false;
}
//This method violates its contract
public int compareTo(Object o){
if (o instanceof Card){
Card c = (Card)o;
if(suit.equals(c.suit))
return 0;
if((c.rank >= rank + Integer.MIN_VALUE) && (c.rank <= rank + Integer.MAX_VALUE)) // check for integer underflow/overflow
return c.rank - rank;
}
throw new ClassCastException();
}
public static void main(String[] args) {
Card a = new Card("Clubs", 2);
Card b = new Card("Clubs", 10);
Card c = new Card("Hearts", 7);
System.out.println(a.compareTo(b)); //returns 0
System.out.println(a.compareTo(c)); //returns a negative number
System.out.println(b.compareTo(c)); //returns a positive number
}
}
|
...