農奴:
私は、それはカードの単純なゲームであることを簡単なアプリケーションを開発していた、と私は、ゲームのすべてのカードを含む配列を作成していたが、問題は、私はこの配列をシャッフルすることができない理由を私は知らないということですか?
私は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;
}
}
終わりに、私はすべてのカードで、この配列はランダムにリミックスします。
GhostCat敬礼モニカC.:
これはここです:
int elements = (int) (40 * Math.random());
int elements = carteNelMazzo.length;
何をシャッフルしません。その後、捨てられるローカル変数に乱数を割り当てます。(あなたが同じスコープに二度同じローカル変数を宣言するように私は実際に、これはコンパイルすらないはずだと思います)
あなたの代わりに必要なもの:のように、新しい値にあなたの40個のインデックスをマップする関数を作成するには:
0, 1, 3, ... 39
となり
14, 2, 7, ...
そこに取得する簡単な方法:Collections.shuffle(someList);
。
より多くのアイデア(直接配列を使用)については、こちらを。
あなたはおそらく、物事を学ぶためにこれをやっているようしかし、私はあなたが慎重に私はあなたを先行言ったダイジェスト示唆しています。あなたが「手動」のカードのリストをシャッフルすることができますどのように思考することから始め(それらに触れていないが、あなたは順序を言われたとき、彼らはどのようにできた「精神的に」再順番にそれらを持っています)。そこから、あなたがそれを行うために、コンピュータに指示することができるかと思います。