- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个Java
模拟红心大战的程序。我有一个Card
我为另一个纸牌游戏模拟创建的类:
public abstract class Card implements Comparable<Card>{
public enum Suits {
SPADES,
CLUBS,
HEARTS,
DIAMONDS
}
public enum Values {
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING,
ACE,
}
private Suits suit;
private Values value;
public Card(final Values value, final Suits suit) {
this.value = value;
this.suit = suit;
}
public Values getValue() {
return value;
}
public Suits getSuit() {
return suit;
}
public void showCard() {
value = getValue();
suit = getSuit();
System.out.println(value + " of " + suit);
}
private int compareTo(final Card comparedToCard) {
//code here
}
}
我需要一些帮助来实现 compareTo
方法。我有使用此方法的经验,以及它应该如何根据您想要比较对象的方式返回 1、0 或 -1。但是,我从未使用 enums
实现它前。我知道Enum
类实现了可比较的,但即使在查看了 API 文档之后,我也不知道如何比较两个枚举。
我想要的结果是对 ArrayList<Card>
进行排序以这样的方式,它们将首先按 Suit
排序。 :梅花 -> 方 block -> 黑桃 -> 红心,并按 Value
排序。所以:梅花(2->Ace)、钻石(2->Ace)等...
任何帮助将不胜感激
最佳答案
枚举已经有 compareTo 。这取决于枚举常量的序数值。序数按照出现的顺序赋予枚举。
对于红心和许多游戏,卡牌的值(value)取决于游戏的状态。因此,虽然您可以使用 Values
的默认 compareTo
来比较相同颜色的牌,但您仍然需要确定回合内牌的实际值/em>.在心中使用颜色中的顺序是没有意义的。 您当然不应该在卡片类中创建 compareTo
。
对于纸牌游戏,应谨慎使用 compareTo
,并且不应使其动态化。如果顺序不是您问题中的默认顺序,则根本不要使用它。请记住,compareTo
用于在一组具有自然顺序的元素中进行比较。在许多纸牌游戏中,纸牌的值(value)会随着游戏的进行而波动,因此不存在这种自然顺序。
如果必须的话,您可以为每一回合创建一个新的比较器
,不过,这个比较器只支持与第一张卡牌相同花色的任何卡牌。由于第一张牌应始终出现在检查的牌列表中,因此单副牌应始终有获胜者。
public class TurnComparator implements Comparator<Card> {
private final Suits firstCardSuite;
TurnComparator(Suits firstCardSuite) {
this.firstCardSuite = firstCardSuite;
}
@Override
public int compare(Card o1, Card o2) {
if (o1.suit != firstCardSuite && o2.suit != firstCardSuite) {
return 0;
}
if (o1.suit != firstCardSuite && o2.suit == firstCardSuite) {
return -1;
}
if (o1.suit == firstCardSuite && o2.suit != firstCardSuite) {
return 1;
}
return o1.value.compareTo(o2.value);
}
}
关于java - 实现与 2 个枚举相当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27096288/
假设已经定义了一个 Point2D 类来存储具有 x 和 y 坐标(均为 double )的二维点。该类包括以下成员: 您的任务是通过添加适当的compareTo 方法将该类修改为Comparable
首先,设计:我需要某种树,其中每个节点可以有任意数量的子节点。每个节点携带一个有效负载。节点的总负载是特定节点的负载+其所有祖先直到根节点的负载。 预期在树上执行的操作有:插入、更新、删除(相当频繁)
如果您愿意,可以快速提问或发表意见。 我需要为数据库表生成一些 UUID。 自动递增键不会削减它,因为我还需要键在数据库和系统中是唯一的。 UUID 工作正常,但它的输出对于行将导出到的某些系统来说太
我这样写 map_tail 的尾递归版本: let map_tail f l = let rec map acc = function | [] -> List.rev acc |
我正在为我当前的项目编写自己的测试运行程序。一个特性(这可能在测试运行器中很常见)是每个测试用例都在子进程中执行,因此测试运行器可以正确检测并报告崩溃的测试用例。 我还想测试测试运行器本身,因此一个测
内存中的 H2 - 插入 - 错误 42000 尝试过版本 1.4.196、1.4.197、1.4.199。 我还尝试在 H2 服务器(本地)上执行 INSERT:也失败 给出错误的行:(抱歉,出于安
我正在评估从 Joda-Time 的使用中迁移我的项目到java.time package在 Java 8 。在 Joda-Time 中,我大量使用了 Interval类(class)。我在 java
我是 C# 新手 -- 不到 50 行代码。 所以问题是 C# 中的 ArrayList 是 Java 中 ArrayList 的一个很好的替代品。 以下是我注意到的一些差异: C# 中的 Array
我需要在一个包含将近 100 万条条目的表中进行查询,但有趣的部分只有前 500 条。 我想知道在查询行的末尾使用 Take() 方法是否是速度(和内存)优化方面的最佳选择,或者只是执行整个查询然后获
我从另一篇文章中读到,c++11 提供了闭包功能。据我了解,闭包非常类似于具有私有(private)成员和公共(public)方法的对象。如果不是,那么它有何不同? 最佳答案 闭包是一种从外部作用域访
我是一名优秀的程序员,十分优秀!