2

私はこの方法を持っています:カードの写真をプロフィール
に割り当てようとしています。iconCards[][]写真は images/ フォルダ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 = 0k = 0、アクセスすることになります

iconCards[0][0]

l移動し1ます。++lプレインクリメントバージョンを使用することをお勧めします。

したがって、l( へのインデックスとしてiconCards) は値2( の場合images/XH.gif) までしか上がりません3( の場合) ではありませんimages/XS.gif

インクリメント/デクリメント演算子の使用方法については、こちらの Oracle チュートリアルを参照してください。

于 2013-05-22T04:04:10.713 に答える