所以我有一个实验室(我们被允许寻求外界的帮助,所以我在这里经过多次努力)我们必须实施一副卡片。我们必须使用枚举类来创建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来实现&#34; hold&#34; 52个分类卡(如你所见);但我们必须最终返回一个已排序的牌组。关于去哪里的任何建议?
答案 0 :(得分:1)
如果您使用像eclipse这样的ide,它会告诉您需要为接口实现哪些方法:
import java.util.*;
class Card {}
class Deck implements Cloneable,Iterable<Card>,Comparator<Card> {
public Deck() {}
@Override public int compare(Card arg0,Card arg1) {
// TODO Auto-generated method stub
return 0;
}
@Override public Iterator<Card> iterator() {
// TODO Auto-generated method stub
return null;
}
private ArrayList<Card> cards;
}
迭代器很简单,因为数组列表有一个。寻找可比较的例子。你必须以某种方式初始化牌组。我在我的卡类中放了一个包含所有卡的静态最终数组。你可以使用数组作为列表从该数组中添加所有内容。
答案 1 :(得分:1)
要回答有关compareTo
的问题:a.compareTo(b)
如果a
小于b
则应返回否定值,如果a
大于{{{},则为正值1}},如果它们相等则为0。此外,如果您要订购对象,则排序应遵循的规则之一是b
,然后是a.compareTo(b) < 0
。 (您不能同时“b.compareTo(a) > 0
小于a
”且“b
小于b
”。只有在卡片不相同时才会返回a
的{{1}}不符合此规则。要解决这个问题,您需要决定订购。 “排序甲板”是什么样的?可能所有的俱乐部都在一起,其次是所有的钻石等,这意味着任何俱乐部卡将少于任何钻石卡。要正确地做到这一点,你需要首先比较套装,并且只有在套装相同时才需要比较:
compareTo
每个-1
上的public int compareTo (Card aCard){
int suitCompare = this.aSuit.compareTo(aCard.aSuit);
if (suitCompare != 0) {
return suitCompare;
}
return this.aNumeral.compareTo(aCard.aNumeral);
}
将返回compareTo
,enum
或<0
。因此,您可以比较套装,返回0
或>0
的值,然后比较套装是否相等。这是编写需要检查多个数据的任何<0
方法的一般方法。
答案 2 :(得分:1)
首先,如果你的枚举有一个参数,你应该用一个参数声明一个构造函数:
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);
private Numerals(int i) {
this.value = i;
}
int value;
}
要创建你的套牌,你必须迭代你的套装和你的数字,并为每一对创建一张卡片:
public Deck() {
for (Suits s : Suits.values()) {
for (Numerals n : Numerals.values()) {
cards.add(new Card(s, n));
}
}
}
来自 compareTo javadoc: 将此对象与指定的对象进行比较以获得顺序。返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。
因此,您必须声明您的Card类的订单,以实现 compareTo (使用序数)
public int compareTo(Card o) {
if(this.suit.ordinal() == o.suit.ordinal()){
return this.numeral.ordinal() - o.numeral.ordinal();
}
return this.suit.ordinal() - o.suit.ordinal();
}
希望它有所帮助。
PS:小心覆盖equals方法take a look here