2016-06-26 13 views
0

まず、カードのデッキのコピーを作成しました。次に、作成したメソッドを使用して、そのコピーデッキの最初の7枚のカードのみを印刷しようとしました(2回する必要があります)。 nextCardは、私たちがデッキにいる場所を追跡するためのカウンターです。オブジェクトをJavaで印刷する

ここ

が私のクラスである:パブリッククラスデッキ

{ 
    private Card[] deck; 
    private int nextCard; 


    public Deck(){ 
     deck = new Card[53]; 

     nextCard = 0; 

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

    }//Deck 

    public Deck(Deck existingDeck){//copy 

     this.deck = new Card[52]; 

     for(int i=0; i < 52; i++){ 
      this.deck[i] = new Card(existingDeck.deck[i]); 

     } 
     nextCard++; 
    } 

    public void shuffle(){ 

     Card crdTemp = new Card(); 
     Random random = new Random(); 
     int num; 
     nextCard = 0; 

     for(int i = 0; i < 52; i++){ 
      num = random.nextInt (51); 
      crdTemp = deck[i]; 
      deck[i] = deck[num]; 
      deck[num] = crdTemp; 

      nextCard++; 
     } 
    } 

    public Card dealACard(){ 
     Card crd = null; 
     if(nextCard > -1){ 
     crd = deck[nextCard]; 
     nextCard--; 
     } 
     return crd; 
    } 

    public String dealAHand(int handSize){ 
     Card crd = null; 
     String cards = ""; 
     for(int i = 0; i < handSize; i++){ 
      crd = dealACard(); 
      cards += crd.toString(); 
      //cards += dealACard().toString(); 
     } 
     return cards; 
    } 

    public String toString(){ 

     String info = ""; 
     for(int i = 0; i < 52; i++){ 
      deck[i].toString (); 
      info += deck[i]; 
      nextCard++; 
     } 
     return info; 
    } 

} 

その後、私のドライバーで:

Deck bDeck = new Deck(aDeck); 
     bDeck.toString(); 
     String[] sevenCards = new String[bDeck]; 

     for(int i = 0; i < 7; i++){ 
      System.out.println ("Copy deck: "); 
      sevenCards[i] = bDeck.toString(); 

     } 

     for(int i = 0; i < 7; i++){ 
      System.out.println (sevenCards[i]); 
     } 


    } 

「私は、私は、各sevenCards配列要素に全体bDeckを割り当てていますと仮定し、私はドンそれをどうやって行うのか分かりません。私はまた、このような新しい配列を作成しようとせずにそれを行う方法があると仮定しますが、再び、私は多くの異なるアイデアを経てきました。本当に感謝してくれるでしょう、ありがとう。

答えて

0

私が正しく理解していれば、デッキの最初の7枚のカードだけを印刷したいですか?だから、そうするようにデッキのカードにアクセスする必要があります。

Deck bDeck = new Deck(aDeck); 
    bDeck.toString(); 
    String[] sevenCards = new String[7]; 

    for(int i = 0; i < 7; i++){ 
     System.out.println ("Copy deck: "); 
     sevenCards[i] = bDeck.deck[i]; 

    } 

    for(int i = 0; i < 7; i++){ 
     System.out.println (sevenCards[i]); 
    } 


} 

Deck.deckは、あなたのforループでアクセス可能であり、あなたが正しくCardクラスのtoString()メソッドを実装する場合、これは動作します。

EDIT:

public Card dealACard(){ 
    Card crd = null; 
    if(nextCard > 0) { 
     nextCard--; 
     crd = deck[nextCard]; 
    } 

    return crd; 
} 
+0

残念ながら、このプロジェクトの要件の一つは、フィールドがプライベートであることである:ここでdealACard()への最終的な変更があるプライベートカード[]デッキ。何か案は?応答していただきありがとうございます。それが助けになるなら、上のクラスを追加することができます。 – Tonantzin

+0

Jup、完全なクラスが役に立ちます。もし7枚のハンドカードを描くことについてだけであり、カードがデッキの上端または下端から引かれているかどうかは関係ありません。デッキのコピーに 'dealACard()'を使うことができます。しかし、私はあなたの状況を正しく理解しているかどうかはわかりません。 – Scyman

+0

私は上記のクラスを追加しようとしています、ありがとう!私はdealACard()を試してみましたが、ArrayIndexOutOfBoundsが得られました。理由を理解できません。 – Tonantzin

関連する問題