集合Shuffle方法有Null对象

Fer*_*305 0 java collections shuffle

我正在开发一个涉及Card对象和Deck对象的Java项目.当我制作Deck时,我有一个ArrayList,其中包含所有52张卡片.但是,当我在Collections中使用shuffle方法时,四个Card对象变为null.Card类工作正常,当我在shuffle方法之前打印出Deck时,所有52张卡都在那里.一旦我在甲板上洗牌,那就是我得到四个空方法的时候.

import java.util.ArrayList;
import java.util.Collections;
public class Deck {
public ArrayList<Card> pack = new ArrayList<Card>();
public int spades = 1;
public int hearts = 1;
public int diamonds = 1;
public int clubs = 1;
public String s = "spades";
public String h = "hearts";
public String cl = "clubs";
public String d = "diamonds";
public Deck(){

}
public void makeDeck()
{
    for (int i = 0; i < 14; i++)
    {
        Card c = null;
        if (clubs < 14)
            c = new Card ("Clubs", clubs);
            clubs++;
            pack.add(c);
        if (spades < 14)
            c = new Card ("Spades", spades);
            spades++;
            pack.add(c);
        if (hearts < 14)
            c = new Card ("Hearts", hearts);
            hearts++;
            pack.add(c);
        if (diamonds < 14)
            c = new Card ("Diamonds", diamonds);
            diamonds++;
            pack.add(c);

    }
}

public void showDeck()
{
    for (int i = 0; i < 52; i++)
    {
        System.out.println(pack.get(i));
    }
}

public String CardNumber (int index)
{
    return (pack.get(index).toString());
}

public int Number (int index)
{
    return pack.get(index).CNum();
}

public void Shuffle()
{
    Collections.shuffle(pack);
}
Run Code Online (Sandbox Code Playgroud)

}

ars*_*jii 10

你的if陈述是有缺陷的,你需要括号:

if (clubs < 14) {  // <--
    c = new Card ("Clubs", clubs);
    clubs++;
    pack.add(c);
}  // <--
Run Code Online (Sandbox Code Playgroud)

其他的if陈述也是如此makeDeck.

请注意,在Java中,如果不包括大括号,那么只有第一个语句if将包含在其主体中.

例如:

// 1
if (condition)
    A
    B
Run Code Online (Sandbox Code Playgroud)

相当于

// 2
if (condition) {
    A
}
B
Run Code Online (Sandbox Code Playgroud)

在确定-statement正文中包含的内容时,代码段1 之前AB之后的空格不相关if.