2013-05-22 33 views
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

问题是在这里

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 tutorial here以了解其用法。

+0

这很完美。 Sotirios非常感谢! –

+0

@NurgulAlshyn不客气。考虑接受一个答案,如果它有帮助。 –