一个很简单赋值但是看的有点似懂非懂,望高手解释一下
看书的时候有一段程序,是模拟一副扑克牌的
我想的初始化扑克牌的代码如下:
//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