我正在开发一个简单的应用程序,它是简单的纸牌游戏,并且我创建了一个包含游戏中所有纸牌的数组,但是问题是我不知道为什么不能改组这个数组?
我尝试使用RANDOM,但没有成功。
public class Mazzo {
private Carta[] carteNelMazzo ;
public Mazzo(){// create the deck
carteNelMazzo = creaMazzo();
mescolaMazzo(carteNelMazzo);
}
/**methods of the deck */
public Carta PescaCarta (){
return (carteNelMazzo==null||(carteNelMazzo.length>0)) ? pescaCarta(carteNelMazzo) : null;
}
public Carta pescaBriscola(){
return (carteNelMazzo==null||(carteNelMazzo.length>0)) ? carteNelMazzo[carteNelMazzo.length-1] : null;
}
/**
* @param carte deve avere lunghezza maggiore uguale ad 1
* @return la prima carta del mazzo
*/
private Carta pescaCarta(Carta[] carte){
Carta[] nuoveCarte=new Carta[carte.length-1];
Carta pescata= carte[0];
System.arraycopy(carte,1,nuoveCarte,0,carte.length);
carte = nuoveCarte;
return pescata;
}
private Carta[] creaMazzo(){
ArrayList<Carta> nuovoMazzo=new ArrayList<>();
for(int i =0; i<4; i++){
// selezione del seme
for(int j = 0;j<10;j++){
// creation of the card from another calss
Carta nuovaCarta= new Carta(Carta.SEME.values()[i],j);
nuovoMazzo.add(nuovaCarta);
}
}
return (Carta[]) nuovoMazzo.toArray();
}
//shuffle deck
private void mescolaMazzo(Carta[] carte){
Random rand = new Random();
int elements = (int) (40 * Math.random());
int elements = carteNelMazzo.length;
}
}
最后,我希望该阵列的所有卡随机混合。
答案 0 :(得分:5)
这里:
int elements = (int) (40 * Math.random());
int elements = carteNelMazzo.length;
不会洗牌。它将随机数分配给局部变量,然后将其丢弃。 (我实际上认为这甚至不应该编译,因为您在同一范围内两次声明了相同的局部变量)
您需要的是:创建一个将40个索引映射到新值的函数,例如:
0, 1, 3, ... 39
成为
14, 2, 7, ...
一种简单的到达方式:Collections.shuffle(someList);
。
有关更多想法(也直接使用数组),请参见here。
但是,由于您可能正在这样做来学习事物,因此建议您仔细消化我之前告诉您的内容。从思考如何“手动”整理一张牌列表开始(不是通过触摸它们,而是在被告知顺序时,他们具有如何“心理上”重新排序它们的顺序)。从那里,思考如何指示计算机执行此操作。
答案 1 :(得分:2)
使用:
set plistFile to (path to preferences from user domain) & "com.apple.universalaccess.plist" as string -- Get the Universal Access plist path of this use
tell application "System Events" to set mouseDriver to value of property list item "stickyKey" of contents of property list file plistFile -- read only the value for mouse keys
答案 2 :(得分:1)
您可以尝试以下操作:
private void shuffleCards (Card[] cards) {
for (int i = 0; i < cards.length; i++) {
Card temp = cards[i];
//random index of the array
int rnd = Math.floor(Math.random() * cards.length);
cards[i] = cards[rnd];
cards[rnd] = temp;
}
}
PS:如果此代码抛出ArrayIndexOutOfBoundsException
,请更改该行
int rnd = Math.floor(Math.random() * cards.length);
至int rnd = Math.floor(Math.random() * (cards.length - 1));
答案 3 :(得分:0)
Here's one I learned many years ago.
int[] cards = IntStream.rangeClosed(0, 51).toArray();
Random r = new Random();
for (int i = cards.length - 1; i >= 0; i--) {
int idx = r.nextInt(i + 1);
int card = cards[idx];
cards[idx] = cards[i];
cards[i] = card;
}
And then there's always the Collections.shuffle() class.