2017-06-13 12 views
0

私はカードのデッキを実装し、そのためのシャッフルメソッドを作成しようとしています。私がメインメソッドで書いているときはすべてうまく動いていますが、シャッフルメソッドを使っても別のメソッドを使ってやってみると、カードの元のシーケンスが得られます(それはシャッフルしていません)。私は間違っているの?カードのデッキとシャッフル方法

import java.util.*; 

public class DeckOfCards { 

    String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"}; 
    String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; 

    private int[] cards; 
    public DeckOfCards(){ 

     cards = new int[52]; 
     for(int i =0; i < 52; i++){ 
      cards[i] = i; 
     } 
    } 

    public void shuffle(int num){ 

     for(int i = 0; i < num; i++){ 
      int m = (int)Math.random() * cards.length; 
      int n = (int)Math.random() * cards.length; 

      int t = cards[m]; 
      cards[m] = cards[n]; 
      cards[n] = t; 
     } 

    } 

    public void display(){ 
     for(int i = 0; i < 52; i++){ 
      String suit = suits[cards[i]/13]; 
      String rank = ranks[cards[i] % 13]; 
      System.out.println(rank+" of "+suit); 
     } 
    } 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     DeckOfCards d = new DeckOfCards(); 
     d.display(); 
     d.shuffle(50); 
     d.display(); 

    } 

} 
+2

注:も使用することができます'Collections.shuffle'です。 –

+1

@ArnaudDenoyelle:彼らは 'カード'の適切なコレクションを持っていれば最高のアプローチだろう。 – Makoto

+0

@Arnaudありがとう、私はそれを認識していますが、私はインタビューの準備をしていますので、それを実装しようとしていたのはCollections.shuffleです。 –

答えて

9

この

int m = (int)Math.random() * cards.length; 

(int) Math.random()(ゼロ)を算出した後cards.lengthを乗算するので、常にゼロです。あなたは何を意味するのか

されました:

int m = (int) (Math.random() * cards.length); 
int n = (int) (Math.random() * cards.length); 
+0

ありがとうございます。それは愚かな間違いだった! –

-3

代わりのmath.randomに頼って、Javaは、独自のランダム化のための種を使用してランダムなクラスがあります。

Random random = new Random(System.currentTimeMillis()); 

int m = random.nextInt(cards.length); 
int n = random.nextInt(cards.length); 
関連する問題