2017-03-06 11 views
1

私は自分のコードに問題が1つしかないので、これらのカードを繰り返したくないので、同じカードをチェックしています。何も変えられていないか、まったく無作為のカードが残っていない限り処理されます。私はそれを行う方法の手がかりがありません。 Idは助けに感謝する。それは嫌なことでも、ちょっとしたことでもない。Javaのカードデッキの破棄パイルを作成する

package Card; 

import java.util.Random; 

public class deckOfCards { 
    public String[] suite = { "Hearts", "Spade", "Diamonds", "Clubs" }; 
    public String[] faceValue = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" }; 
    public int deckCount = 0; 
    private Card[] deck = new Card[52]; 
    public int index; 

    public void buildDeck() { 
     for (int i = 0; i < suite.length; i++) { 
      for (int j = 0; j < faceValue.length; j++) { 
       deck[deckCount] = new Card(suite[i], faceValue[j]); 
       deckCount++; 
      } 
     } 
    } 
public Card shuffle(){ 
    Random rand = new Random(); 
    int index = rand.nextInt(52); 
    return deck[index]; 
} 

} 

これがカードを作成し、ランダム化します。 パッケージカード。

public class Card { 

private String suite; 
private String faceValue; 

public Card(){ 

} 

public Card(String suite, String faceValue){ 
this.setSuite(suite); 
this.setFaceValue(faceValue); 
} 
    public String getSuite(){ 
     return suite; 
    } 


//array list 
// 
public void setSuite(String suite){ 
    this.suite = suite; 
} 

public String getFaceValue(){ 
    return faceValue; 
} 

public void setFaceValue(String faceValue){ 
    this.faceValue = faceValue; 
} 
} 

package Card; 

public class Driver { 



public deckOfCards cards = new deckOfCards(); 
    private Card [] discard = new Card[52]; 

    public static void main(String[] args) { 
     Driver driver = new Driver(); 
     driver.DealCards(); 

    } 

    public void DealCards(){ 
     int cardsLeft = 52; 
     cards.buildDeck(); 
     Card randomCard = new Card(); 
     for (int i = 0; i < 5; i++) { 
      cardsLeft--; 
      randomCard = cards.shuffle(); 

      System.out.println(randomCard.getFaceValue() + " of " + randomCard.getSuite()); 

     } 
     System.out.println("Cards left:" + cardsLeft); 
    } 
} 

これはカードを処理します。再び、どんな助けもありがとう。

答えて

0

デッキからカードを取り除く方法がないと思います。

カードを処理するたびに、カードを取り除く必要があり、毎回52枚のカードすべてではなく、残りのデッキで新しいランダム描画が実行されます。これは交換なしのと呼ばれます。現在のコードでは、の代わりにが使用されます。

  • は配列ではなく、ベクトルやカードを使用します。

    これを達成する最も簡単な方法は、唯一のdeckOfCardsクラスを変更することです。これにより、挿入と削除が可能になります。配列では、サイズを変更することはできません。毎回新しい配列を作成する必要があり、非常に非効率です。

  • シャッフル機能では、ランダムなカードだけを返すのではなく、ベクターからカードを取り除く必要があります。
  • シャッフル機能では、デッキの縮小に合わせて52を適応させます。
関連する問題