所以我有一个Hand对象,它是一个Card对象数组。这是Hand的构造函数:
public Hand(){
Card[] Hand = new Card[5];
}
这是卡片的构造函数:
public Card(int value, char suit){
if (value < 0 || value > 13)
{
System.err.println("Twilight Zone Card");
System.exit(1);
}
this.value = value;
if (suit == 'c')
suit = 'C';
if (suit == 'd')
suit = 'D';
if (suit == 'h')
suit = 'H';
if (suit == 's')
suit = 'S';
if (suit == 'C' || suit == 'D' || suit == 'H' || suit == 'S')
{
this.suit = suit;
}
else
{
System.err.println("No such suit.");
System.exit(1);
}
}
我必须制作的游戏是钓鱼,所以有时我需要从手中拉出特定的卡片对象来比较它或打印它等等。所以一旦我在我的主类中实例化一个Hand,它就把它视为一个对象而不是一个数组。那么我该怎么把牌拉到手中的不同位置呢?就像我不能做的那样:
Hand Player1 = new Hand();
Hand Player2 = new Hand();
if (Player1[2] == Player2[2])....
所以我试着在Hand类中创建一个getCard函数,但我不知道如何访问,比如手中的第二张牌,因为它不会让我做手[2]因为它没有不要把它当成阵列。我现在正在努力奋斗。我该怎么办?
答案 0 :(得分:2)
public class Hand {
Card[] hand;
public Hand() {
hand = new Card[5];
}
public Card getCard(int index) {
return hand[index];
}
}
player1.getCard(2).equals(player2.getCard(2)) // avoid using "==" to test equality unless you know what you are doing.
编辑:
在java中,“==”可以用来测试原始值,但不能测试对象,除非你想测试它们是否是相同的对象,你可以在java中找到关于相等性测试的大量答案。
所以你必须在Card
中实现/覆盖正确的方法来测试Card的相等性。
答案 1 :(得分:0)
首先你需要在你的Card类中使用equver和hachCode。
public int hashCode(){
// its simple but just solve the purpose
return value + suit;
}
public boolean equals(Object other){
// Check for null, object type...
Card otherCard = (Card) other;
return this.value==otherCard .value && this.suit==otherCard.suit;
}
现在可以安全地使用Card类型,同时比较它的两个实例并在List,Set ...
等集合中使用In Hand类具有给定索引处卡的存取方法。
class Hand{
// your code.
public Card getCardAtIndex(int i){
// check size, null
return theCardArray[i];
}
}