我有一个关于如何改组数组的问题。 背景是:
写一个记忆匹配游戏,它使用16张卡片,这些卡片布置在一个4 * 4的正方形中,并标有1到8的数字对。
目前,我需要做的是初始化这些卡片并随机播放这些卡片。
现在我能想到的是创建一个Card类,包括从1到8的变量Rank,其次,命名一个新类(matchingGame)(无论你喜欢什么)并编写一个新的静态方法:shuffle()。< / p>
但我坚持这一步。
我的第一个问题是如何初始化这16张卡片(8对)? (我认为我的代码不是有效的方式)。
我的第二个问题是如何在初始化后洗牌?
我的代码是:
public class Card
{
private int rank;
public Card(int iniRank)
{
switch (iniRank)
{
case 1:
rank =1;
break;
case 2:
rank =2;
break;
case 3:
rank =3;
break;
case 4:
rank =4;
break;
case 5:
rank =5;
break;
case 6:
rank =6;
break;
case 7:
rank =7;
break;
case 8:
rank =8;
break;
}
}
public int getRank()
{
return rank;
}
}
public static void initialize(Card[] cards)
{
for (int i=0;i<2;i++)
{
cards[i] = new Card(1);
}
for (int i=2;i<4;i++)
{
cards[i] = new Card(2);
}
....
}
感谢大家以前提出的问题!
在同一背景中还有一个问题,作为您的好建议,您知道如何改变一维阵列吗?
但是如何改组二维阵列?显然,我不能用
List<Card> newcards = Arrays.asList(cards)
现在转换为List。
感谢您的帮助
答案 0 :(得分:2)
初始化数组的方法基本上是正确的:遍历数组并在每个点添加一个新实例。
Card[] cards = ...;
for (int i = 0; i < cards.length; i++)
cards[i] = ... // new Card instance
现在进行改组 - 不要重新发明轮子:使用Collections.shuffle
:
Card[] cards = ...;
List<Card> l = Arrays.asList(cards);
Collections.shuffle(l);
答案 1 :(得分:1)
我认为您已经意识到,不需要在构造函数中使用switch
语句。只需直接指定rank
int参数的值。
我也不确定你的初始化方法发生了什么。你创建一个循环迭代两次,以创建一个特定级别的卡?
就改组而言,您可能需要查看Knuth shuffle。
答案 2 :(得分:1)
如果你想到卡片的线性位置(即从左到右,从上到下的网格位置的单个列表),你可以简单地使用Collections实用程序类的shuffle()
方法:
List<Card> cards = new ArrayList<Card>();
// populate the list with what ever cards you want, how you want
Collections.shuffle(cards);
然后将卡显示为网格
答案 3 :(得分:0)
我强烈建议您实施this算法。
这是有效的,众所周知的,也是正确的。你会惊讶地发现后者是多么重要 - see this for an interesting example当赌场实施不正确的洗牌算法时会发生什么。
答案 4 :(得分:0)
我没有收到你的switch语句。您可以像这样创建一个Card类:
public class Card
{
private int rank;
public Card(int iniRank){
rank = iniRank;
}
public int getRank(){
return rank;
}
}
比你创建匹配的游戏类。添加16张牌然后随机播放。
public class matchingGame
{
private List<Card> cards = null;
public matchingGame(){
cards = new ArrayList<Card>(16);
for (int i=1; i<=8; i++)
{
cards.add(new Card(i));
cards.add(new Card(i));
}
}
public void shuffle()
{
//Shuffle algorithm here.
}
}
对于算法我建议查看这篇文章:Java's Collections.shuffle is doing what?