日期:2014-05-19  浏览次数:20849 次

一个很简单赋值但是看的有点似懂非懂,望高手解释一下
看书的时候有一段程序,是模拟一副扑克牌的
我想的初始化扑克牌的代码如下:
//deck是存放52张牌的数组
int   i=0;
for(int   j=0;j <suits.length;j++)//suits是存放四种花色的数组
      for(int   k=0;k <faces.length;k++)//faces是存放13种数值的数组
      {
              deck[i]=new   card(faces[k],suits[j]);
              i++;
      }

但是书中就一句话就解决了
for(int   i=0;i <deck.length;i++)
        deck[i]=new   card(faces[i%13],suits[i%4]);

有点晕,是不是因为正好13和4互质,所以这种方法可以行的通呢?

------解决方案--------------------
貌似13和4互质的话,这样能行得通,但是需要数学推导一下。

所以显然这样写是不好的,更好的写法:

int[] deck = new deck[13*4];

for(int i=0;i <deck.length;i++)
deck[i]=new card(faces[i/4],suits[i%4]);
------解决方案--------------------
楼主分析是对的,如何不是互质那么就会出现重复
比如2和4的结果就是:
00,00
00,00
00,02
00,02
01,01
01,01
01,03
01,03