所以我有一个实验室(我们被允许寻求外界的帮助,所以我在这里经过大量的努力)我们必须实施一副卡片 . 我们必须使用枚举类来创建num
适合西装:
public enum Suits {
CLUBS, HEARTS, DIAMONDS, SPADES
}
对于数字:
public enum Numerals {
DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9),
TEN(10), JACK(11), QUEEN(12), KING(13), ACE(14);
}
我的卡类很简单,但我不确定这两个代码块:
public int compareTo (Card aCard){
if (aCard.aNumeral.equals(this.aNumeral) && aCard.aSuit.equals(this.aSuit)){
return 0;
}
else {
return -1;
}
}
和
public boolean equals (Card aCard){
if (this.compareTo(aCard) == 0){
return true;
}
else {
return false;
}
}
现在是棘手的部分......甲板......
所以我们必须使用Cloneable,Iterable和Comparator来实现这个套牌,所以这就是我到目前为止所做的,而且无法弄清楚要做什么 .
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
public class Deck implements Cloneable, Iterable<Card>, Comparator<Card> {
private ArrayList<Card> cards;
public Deck (){
for (Card c : cards){
}
}
我正在努力甚至把构造函数放在一起 . 我打算使用ArrayList来“保存”52个已排序的卡片(如你所见);但我们必须最终返回一个已排序的牌组 . 关于去哪里的任何建议?
3 回答
要回答有关
compareTo
的问题:a.compareTo(b)
如果a
小于b
则应返回负数,如果a
大于b
则返回正数,如果're equal. Also, if you'重新排序对象则返回0,排序应遵循的规则之一是如果a.compareTo(b) < 0
,然后b.compareTo(a) > 0
. (你不能同时拥有“a
小于b
" and "b
小于a
”) . 你的compareTo
,只要卡不是't equal, doesn'就会按照这个规则返回-1
. 要解决这个问题,您需要决定订购 . "sorted deck"是什么样的?可能所有的俱乐部都在一起,其次是所有的钻石等,这意味着任何俱乐部卡都会比任何钻石卡少 . 要正确执行此操作,您需要首先比较套装,并且仅在套装相等时才进行比较:每个
enum
上的compareTo
将返回<0
,0
或>0
. 所以你可以比较套装,返回一个<0
或>0
的值,然后比较套装是否相等 . 这是编写需要检查多个数据的任何compareTo
方法的一般方法 .如果您使用像eclipse这样的ide,它会告诉您需要为接口实现哪些方法:
迭代器很简单,因为数组列表有一个 . 寻找可比较的例子 . 你必须以某种方式初始化牌组 . 我在我的卡类中放了一个包含所有卡的静态最终数组 . 您可以使用数组作为列表从该数组中添加所有内容 .
首先,如果你的枚举有一个参数,你应该用一个参数声明一个构造函数:
要创建yor套牌,您必须迭代您的套装和数字并为每对创建一张卡片:
从compareTo javadoc:将此对象与指定的对象进行比较以获得顺序 . 返回负整数,零或正整数,因为此对象小于,等于或大于指定对象 .
因此,您必须声明您的Card类的订单以实现compareTo(使用序数)
希望能帮助到你 .
PS:小心覆盖equals方法take a look here