2016-10-06 4 views
2

私の問題は、クラスの中でshuffle()メソッドがprivate(プライベートである必要があります)を使用しているようです。 drawNextCard()メソッドで使用するか、CardDeck()コンストラクタで使用するかはあまりお確かめください。私のコーディングが正しいかどうかも私はあまりよく分かりません。どんな提案/ヒントも大歓迎です!私のプライベートシャッフルを使用するにはどうすればいいですか

import java.util.*; 
public class CardDeck 
{ 
    private String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", 
        "J", "Q", "K", "A" }; 
    private char[] suits = {'s','h','d','c'}; 
    private Card[] cards = new Card[13]; 
    private int currentCard; 

    CardDeck() 
    { 
     Card newCard; 

     for(int i=0; i<4; i++) 
     { 
      for(int j=0; j<13; j++) 
      { 
       cards[j] = new Card(this.ranks[j], this.suits[i]); 
      } 
     } 

    } 

    public void testing() //just for testing 
    { 
     System.out.println(this.suits[0]); 
    } 

    public Card drawNextCard() 
    { 
     return cards[currentCard++]; 
    } 

    private void shuffle() 
    { 
     Card[] tmp = new Card[200]; 
     for (int i = 0; i < cards.length; i++) 
     { 
      int index = i + (int)(Math.random() * (cards.length)); 

      tmp[i] = cards[i]; 
      cards[i] = cards[index]; 
      cards[index] = tmp[i]; 
     } 
    } 
} 

メイン:

public class BlackJoker 
{ 
    public static void main(String[] args) 
    { 
     CardDeck cardDeck = new CardDeck(); 

     cardDeck.testing(); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
    } 
} 

テストのための私の出力を使用すると、IOB例外を得ている理由があるため、上記のステートメントである

s 
2c 
3c 
4c 
5c 
6c 
7c 
+2

どのように 'シャッフル()'を使用しようとしていますか?あなたはこのコードで決して呼ぶことはありません。 –

+2

また、あなたのカードのデッキはおそらく52枚のカードでなければなりません。 13枚のカードを作成して上書きします。 –

+1

ここでは問題はありません。それはあなたがそれを実装する方法です。次のカードを取る前にカードデッキをシャッフルしたい場合は、 'drawNextCard'メソッドの中でそれを呼び出す必要があります。それ以外の場合は、最初だけシャッフルしたい場合は、コンストラクタで呼び出します。 –

答えて

0
int index = i + (int)(Math.random() * (cards.length)); 

だろう。あなたのカードのためのインデックスが12を超えることはできませんが、上記のステートメントがために出てくるかもしれチャンスがあり道を越えたので、ここでは上記の文の交換のための可能なオプションは12:

  1. int index = (int)(Math.random() * (cards.length));制限はカードがスワップされ、カードが元の位置に戻されます。
  2. 別のオプションは、Collections.shuffle()を使用することです:シャッフルを呼び出す方法については、コメント部分にあなたの質問のために

    private void shuffle() { List<Card> cardList = Arrays.asList(cards); Collections.shuffle(cardList); cards = cardList.toArray(cards); }

を、それはあなたがそれを呼びたい場所によって異なります。それが同じクラスにある場合は、それをshuffle();とだけ定義します。それがメインクラスまたは別のクラスにある場合は、クラスのインスタンスの後に、CardDeck cardDeck = new CardDeck();cardDeck.shuffle();のように呼び出します。

関連する問題