Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试打印桥牌游戏时出现空错误_Java - Fatal编程技术网

Java 尝试打印桥牌游戏时出现空错误

Java 尝试打印桥牌游戏时出现空错误,java,Java,当我运行main时,这一行出现了一个java null错误 int rank = cards[i].getRank(); int points = cards[i].getPoints(); 我只是想得到手牌数组中牌的countHighCardPoints()点值,并将这些点值相加。 如果我在char suit=cards[I].getSuit()上没有得到空值,我还将假设我的countDistributionPoints()将起作用 因此,我的手需要帮助 public class Hand

当我运行main时,这一行出现了一个java null错误

int rank = cards[i].getRank();

int points = cards[i].getPoints();
我只是想得到手牌数组中牌的countHighCardPoints()点值,并将这些点值相加。 如果我在
char suit=cards[I].getSuit()上没有得到空值,我还将假设我的countDistributionPoints()将起作用

因此,我的手需要帮助

public class Hand
{

 //Holds an array of card objects
 private Card [] cards = new Card [13];

/**
 * Constructor takes array of Cards and assigns that parameter to
 * the instance variable
 */
public Hand(Card [] cards)
{
    Card [] hand = cards;
}

/**
 * Looks through each card in hand array and adds its points
 * if the card has any to a sum highPoints
 */
public int countHighCardPoints()
{
    int highPoints = 0;

    for (int i = 0; i < cards.length; i++) {

        int rank = cards[i].getRank();
        int points = cards[i].getPoints();

       highPoints += points;

    }

    return highPoints;
}


public int countDistributionPoints()
{
    int countPoints = 0;

    for (int i = 0; i < cards.length; i++) {
        //char suit = cards[i].getSuit();

        if (cards[i].getSuit() >= 3)
            countPoints = 0;
        else if (cards[i].getSuit() == 2)
            countPoints++;
        else if (cards[i].getSuit() == 1)
            countPoints += 2;
        else if (cards[i].getSuit() == 0)
            countPoints += 3;
    }

    return countPoints;
}
public-class-Hand
{
//保存一组卡片对象
私人卡[]卡=新卡[13];
/**
*构造函数获取卡片数组并将该参数分配给
*实例变量
*/
公共手牌(卡[]张)
{
卡片[]手=卡片;
}
/**
*查看手牌阵列中的每张牌并添加其点数
*如果卡上有任何到一个总和的高点
*/
公共int countHighCardPoints()
{
int高点=0;
对于(int i=0;i=3)
计数点=0;
else if(cards[i].getSuit()==2)
countPoints++;
else if(cards[i].getSuit()==1)
计数点+=2;
else if(cards[i].getSuit()==0)
计数点+=3;
}
返回点;
}
甲板等级供参考

public class Deck
{
//Holds an array of card objects
private Card [] cards  = new Card [52];

//Holds number of cards remaining in deck
private int count;


/**
 * Creates a Card [] arrayOfCards which is 13 cards for each player 
 * and will determine number of cards that was dealt with count.
 */
public Card [] dealThirteenCards()
{
    Card [] arrayOfCards = new Card [13];

    for (int i = 0; i <= 12 && count < 52; i++) {
        arrayOfCards[i] = cards[i];
        count++;
    }

    return arrayOfCards;
}
公共类甲板
{
//保存一组卡片对象
私人卡[]卡=新卡[52];
//持有牌组中剩余的牌数
私人整数计数;
/**
*创建一张卡片[]arrayOfCards,每个玩家有13张卡片
*并将确定已处理的卡数计数。
*/
公共卡[]交易第三方信用卡()
{
卡片[]arrayOfCards=新卡片[13];

对于(int i=0;i问题出现在下面的代码中。不是初始化实例变量,而是初始化局部变量

Card[]手=卡片;

将此更改为:


this.cards=cards

问题在下面的代码中。不是初始化实例变量,而是初始化局部变量

private Card[] cards = new Card [13];
Card[]手=卡片;

将此更改为:

this.cards=cards

private Card[] cards = new Card [13];
这将创建一个包含13个元素的数组。除非循环遍历每个索引并使用新卡初始化它,否则所有元素都为空

public Hand(Card [] cards) {
    Card[] hand = cards;
}
此构造函数使用作为参数传递的卡片初始化局部变量
hand
。因此
卡片
字段永远不会被此构造函数重新初始化

这将创建一个包含13个元素的数组。除非循环遍历每个索引并使用新卡初始化它,否则所有元素都为空

public Hand(Card [] cards) {
    Card[] hand = cards;
}

此构造函数使用作为参数传递的卡片初始化一个局部变量
。因此
卡片
字段永远不会被此构造函数重新初始化。

仍在使用您的代码,但目前我在这里发现了一些东西:

1.在手牌的构造中,您从不将传入的值分配给其实例变量卡,这就是为什么每只手牌下的牌组将是一个空数组的原因。您应该将其更改为:

public Hand(Card [] cards) {
    this.cards = cards;
}
2.
dealThirteenCards
甲板下行为异常

for (int i = 0; i <= 13 && count < 52; i++) {
    arrayOfCards[i] = cards[i];
    count++;
}

for(int i=0;i仍在使用您的代码,但目前我在这里发现了一些东西:

1.在手牌的构造中,您从不将传入的值分配给其实例变量卡,这就是为什么每只手牌下的牌组将是一个空数组的原因。您应该将其更改为:

public Hand(Card [] cards) {
    this.cards = cards;
}
2.
dealThirteenCards
甲板下行为异常

for (int i = 0; i <= 13 && count < 52; i++) {
    arrayOfCards[i] = cards[i];
    count++;
}

for(int i=0;i
private Card[]cards=new Card[14];
-桥牌手什么时候有十四张牌了?我一定是打错了,会尽快改变。所以当你说
cards[i]时,你不会得到
NullPointerException
,但是当你说
cards[i]时,你会得到
NullPointerException
.getPoints()
?不确定这是否可行,除非问题出现在
getPoints
方法本身的代码中。能否显示异常的堆栈跟踪?@ChetanKinger嗯,我确实得到
卡[I].getRank()和
卡[I].getPoints()的空错误
在我运行main时,其中一个问题刚刚被注释掉。您不认为这是您应该在问题中发布的相关信息吗?也可以是“卡片”[]这一个人到底在干什么?我感觉你没有向我们展示你实际运行的代码。当你这么做时,我们帮不了你。
private Card[]cards=新卡[14]桥牌手从什么时候开始有十四张牌了?我肯定是打字错误,会尽快改变。所以当你说
cards[i].getRank()时,你不会得到
NullPointerException
,但是当你说
cards[i].getPoints()时,你会得到
NullPointerException
?除非问题出现在
getPoints
方法本身的代码中,否则不确定这是否可行。您能显示异常的堆栈跟踪吗?@ChetanKinger我确实得到
cards[I].getRank()和
cards[I].getPoints()的空错误
在我运行main时,其中一个问题刚刚被注释掉。您不认为这是您应该在问题中发布的相关信息吗?也可以是“卡片”[]hand=cards.这个孤独的人到底在做什么?我感觉你没有向我们展示你实际运行的代码。当你这样做时,我们帮不了你。我相信构造函数希望数组作为硬依赖项传递,所以客户端代码有责任确保它们传递一个填充的数组。我的观点是