我正在制作纸牌游戏,我有以下代码部分(一小段摘录):
Hand[] hands;
hands = new Hand[t];
for (i = 1; i > t; i++) {
hands[i] = new Hand();
}
public class Hand {
Hand() {
Card[] hand;
hand = new Card[52];
}
}
如何访问Hand
对象中的数组?
例如,假设我有一个名为Hand
的{{1}}类的实例,如何访问hand1
对象中的数组hand
?
执行hand1
无效。
答案 0 :(得分:2)
执行
hand1.hand[x]
无效。
您正在构造函数中声明您的“字段”。
你必须在外面声明它,否则它只是一个局部变量。
public class Hand {
Card[] hand;
Hand() {
hand = new Card[52];
}
}
但是,我认为你知道封装,所以我不会开始这个主题。
答案 1 :(得分:2)
您应该定义一个getter和一个setter:
public Card getCard (int i)
throws SomeException()
{
if (i < 0 || i >= hand.length)
throw new SomeException();
return hand[i];
}
public void setCard (Card theCard, int i)
throws SomeException()
{
if (i < 0 || i >= hand.length)
throw new SomeException();
hand[i] = theCard;
}
当然,您应该为i添加范围检查。
另外,正如Mik正确评论的那样,将手定义在正确的位置(构造函数之外):
public class Hand {
private Card[] hand;
Hand() {
hand = new Card[52];
}
}
答案 2 :(得分:1)
Hand() {
Card[] hand;
hand = new Card[52];
}
当你在Hand()构造函数中声明它时,Card [] hand是一个局部变量。如果你想使用这个变量,你应该全局声明它:
private Card[] hand;
Hand() {
hand = new Card[52];
}
并且有吸气剂和吸气剂setter方法检索私有变量(这称为'封装')。我认为没有必要进入那些