Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Loops_Methods_Compiler Errors - Fatal编程技术网

Java 一副牌有问题吗

Java 一副牌有问题吗,java,arrays,loops,methods,compiler-errors,Java,Arrays,Loops,Methods,Compiler Errors,我对这部分代码有问题。调用该方法时,我不断收到空指针异常。我不确定这有什么问题 class Deck{ public Card[] myCards = new Card[52]; void refreshDeck(){ int cardValue = 1; char cardSuit = 'c'; for (int i = 0; i < 52; i++){ myCards[i].setValue(cardValue);

我对这部分代码有问题。调用该方法时,我不断收到空指针异常。我不确定这有什么问题

class Deck{

public Card[] myCards = new Card[52];

void refreshDeck(){
    int cardValue = 1;
    char cardSuit = 'c';     

    for (int i = 0; i < 52; i++){
        myCards[i].setValue(cardValue);
        myCards[i].setSuit(cardSuit);

        if (cardValue == 13){
            cardValue = 0;
            switch(cardSuit){
                case 'c':
                    cardSuit = 's';
                    break;
                case 's':
                    cardSuit = 'd';
                    break;
                case 'd':
                    cardSuit = 'h';
                    break;
            }
        }
        cardValue++;
    }
}
类甲板{
公共卡[]myCards=新卡[52];
空甲板(){
int cardValue=1;
char cardSuit='c';
对于(int i=0;i<52;i++){
myCards[i].setValue(cardValue);
myCards[i].setSuit(cardSuit);
如果(cardValue==13){
cardValue=0;
开关(卡套){
案例“c”:
cardSuit='s';
打破
案例s:
cardSuit='d';
打破
案例“d”:
cardSuit='h';
打破
}
}
cardValue++;
}
}

<>我真的找不到错误。这是在C++上工作的。

你必须初始化数组中的每个卡。试试看:

for (int i = 0; i < 52; i++){
    myCards[i] = new Card();//a constructor
    myCards[i].setValue(cardValue);
    myCards[i].setSuit(cardSuit);
    //...
for(int i=0;i<52;i++){
myCards[i]=新卡();//构造函数
myCards[i].setValue(cardValue);
myCards[i].setSuit(cardSuit);
//...

您尚未初始化阵列中的每张卡,请添加

myCards[i] = new Card();

到for循环的开始

您已经构建了一个包含52个对
对象引用的数组,但这些对象尚未创建。该数组是一个包含52个空引用的数组。您需要构建每个引用:

for (int i = 0; i < 52; i++) {
    myCards[i] = new Card();
    ...

是的,就像下面的答案一样,您已经初始化了卡片数组,但是您没有为数组中的每个位置创建新的卡片对象。谢谢。我知道我必须初始化一些东西,但不知道是什么。不客气。如果您对我的答案满意,请将您的问题标记为已回答:)
    myCards[i] = new Card(cardValue,cardSuit);