【发布时间】:2016-04-16 00:09:38
【问题描述】:
我需要将比较器类添加到我用 Java 表示卡片的类中。一个比较器 (compareAscending) 将卡片按升序排序,首先按花色排序,然后按等级排序(即花色顺序黑桃、红心、方块、梅花,然后按价值)。第二个比较器(compareRank)按排名升序排序,即先所有的两个,然后是所有的三个。 .
西装和等级都是枚举,它们的代码如下
enum Rank {
TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8),
NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);
private int value;
Rank(int i) {
value = i;
}
public int getValue() {
return value;
}
public Rank getPrevious() {
return values()[ordinal() > 0 ? ordinal() - 1 : 0];
}
}
enum Suit {
CLUBS, DIAMONDS, HEARTS, SPADES;
public static Suit randomSuit() {
Random random = new Random();
return values()[random.nextInt(values().length)];
}
}
我以前从未使用过比较器类,所以想知道是否有人可以解释我如何插入它们?它们与使类具有可比性(它是)相同吗?
提前致谢。
【问题讨论】:
-
您可以使用这些比较方法创建一个 Card 类。只需使用
.ordinal()来获取枚举在枚举数组中的位置并像这样比较它们。 -
您要求提供教程。为什么具体不能自己写代码?
-
您不需要“插入”它们,只需创建两个
Comparator实现,并将该比较器的一个实例传递给排序函数以供其使用。 -
您正在使用 java 8,对吗?因为 java 8
Comparator可以做的事情相当紧凑,并且可以组合事物。在卡片类型中包含 Suite 和 Rank 是有意义的。对于不同的游戏,不同的比较器可能有意义。
标签: java comparator