试图分配卡片图片,但它给了我错误的卡片

时间:2013-05-22 03:59:01

标签: java arrays

我有这个方法:
我正在尝试将卡片的图片分配到他们的iconCards[][]个人资料中。例如,图片位于图像/文件夹中。 images/AS.gif (Ace of Spades), images/AD.gif (Ace of Diamonds)等。

static void loadCardIcons(){
    int l =0;
    int k =0;

    while (k < 14){
        for (l = 0; l < 4; l++){
            String card = "images/" + Character.toString(valueRanks[k]) + "C.gif";
            iconCards[k][l] = new ImageIcon(card);
            System.out.println(k + " " + l + "   " + card);
            card = "images/" + Character.toString(valueRanks[k]) + "D.gif";
            iconCards[k][l++] = new ImageIcon(card);
            System.out.println(k + " " + l + "   " + card);
            card = "images/" + Character.toString(valueRanks[k]) + "H.gif";
            iconCards[k][l++] = new ImageIcon(card);
            System.out.println(k + " " + l + "   " + card);
            card = "images/" + Character.toString(valueRanks[k]) + "S.gif";
            iconCards[k][l++] = new ImageIcon(card);
            System.out.println(k + " " + l + "   " + card);
            k++;
        }
    }
    iconBack = new ImageIcon("images/BK.gif");
}


...12 3   images/KS.gif
13 0   images/XC.gif
13 1   images/XD.gif
13 2   images/XH.gif
13 3   images/XS.gif

*13
2
images/XS.gif*

您可以看到value = 13 and suit = 2。根据上面的输出卡应该是images/XH (JokerHearts),但它打印我XS。为什么?这是运行它的方法。无法找到几周内发生的事情。

static public Icon getIcon(Card card){
    loadCardIcons();

    return iconCards[valueAsInt(card)][suitAsInt(card)];
}

1 个答案:

答案 0 :(得分:4)

问题在这里

iconCards[k][l++] = new ImageIcon(card);

l++l上的后增量运算符。因此,在l = 0k = 0的情况下,您可以访问

iconCards[0][0]

然后l将转到1。您可能希望使用预增量++l版本。

因此,您的l(作为iconCards的索引)仅上升到值2(适用于images/XH.gif),而不是3(适用于{{ 1}})。

有关其使用的说明,请参阅增量/减量运算符的Oracle tutorial here