java - 类似的Java类

标签 java class methods comparable

我这个类使用枚举类型作为甲板。 使此类可比较以将卡片按升序排序的最有效方法是什么? 如果两个卡面值是枚举类型,是否可以在方法中比较它们? (比如返还差价什么的?) 谢谢。

public class Card {

public enum Rank {ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, 
                    JACK, QUEEN, KING}
public enum Suit {CLUBS, DIAMONDS, HEARTS, SPADES}

private final Rank rank; 
private final Suit suit; 

private Card(Rank rank, Suit suit) {
    this.rank = rank;
    this.suit = suit;
}

public int compareTo(Card c) {
    Card aCard = (Card)c;
    int rankComparison = rank.compareTo(aCard.rank);
    return rankComparison != 0 ? rankComparison : suit.compareTo(aCard.suit);
}

public Rank rank(){
    return rank; 
}
public Suit suit(){
    return suit; 
}

public String toString(){ 
    return "The " + rank + " of " + suit + "."; 
}
}

最佳答案

public int compareTo(Card c) {
    int rankComparison = rank.compareTo(c.rank);
    return rankComparison != 0 ? rankComparison : suit.compareTo(c.suit);
}

试试这个,只需让类实现Comparable接口(interface)即可。请注意,枚举按照声明的顺序进行比较。

看, http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#compareTo(E )

要测试这一点,您可以使用不同的卡编写 JUnit 测试,例如,

@Test
public void test()
{
    Card aceOfSpades = new Card(Rank.ACE, Suit.SPADES);
    Card fourOfClubs = new Card(Rank.FOUR, Suit.CLUBS);

    assertTrue(aceOfSpades.compareTo(fourOfClubs) > 0));
}

关于java - 类似的Java类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13271816/

相关文章:

windows-installer - 从 msi 安装程序调用 Project Server Interface Web 方法

node.js - 保护csrf Nodejs表单

python类方法和继承

java - 如何比较STL数据结构中的对象

Ruby 数组转化为方法

Java:在arraylist中存储扩展对象并调用parent toString方法

c++ - 类模板的所有实例化是否可以共享同一个模板独立成员函数?

java - 为什么 `List` 有 `map` 而没有 `forEach` 默认方法?

java - Hibernate异常: saveOrUpdate is not valid without active transaction

java - Selenium - NoSuchElementException 错误检查