2

我有这种方法:
我正在尝试将卡片的图片分配到他们的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)];
}
4

1 回答 1

4

问题就在这里

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

l++是 上的后增量运算符l。因此,给定l = 0and k = 0,您将访问

iconCards[0][0]

然后l会去1。您可能想要使用预增量++l版本。

因此,您的l(作为 的索引iconCards)只会上升到值2(对于images/XH.gif),而不是3(对于images/XS.gif)。

有关其使用的说明,请参阅此处有关递增/递减运算符的Oracle 教程。

于 2013-05-22T04:04:10.713 回答