2017-02-25 12 views
0

私はランダムに5枚のカードを引っ張って、あなたにどのような手札があるか教えてくれるプロジェクトに取り組んでいます。私はそれのほとんどをやりましたが、同じカードを2度引っ張っていないことを確認するためにループをかけることはできません。 (つまり、心が2つ、心が3つ、ダイヤが4つ、ダイヤモンドが4つ、スペードが5つ)を確認する必要があります。カードが1度以上選択されていないことを確認する必要があります

int[] value= new int[5]; 
int[] suit= new int[5];  
for (int i =0; i< value.length; i++) { 
    card = rand.nextInt(13)+2; 
    value[i]=card; 
} 
for (int k=0; k<suit.length; k++) { 
    cardSuit = rand.nextInt(4)+1; 
    suit[k]=cardSuit; 
} 
System.out.print("\nHere are your five cards"); 
for (int j=0; j<5;j++) {  
    System.out.print("\n"+value[j]+" of "+suit[j]); 
} 

また、私はとのトラブルを抱えているもうひとつのようになど、私はきちんとそれがハーツの代わりに、1を出力しますことを確認する方法は、ダイヤモンドの代わりの2を見つけることができないということで、 。私は非常に単純なものを使用してきたので、同じようなコメントも非常に高く評価されます。ありがとうございました。

+1

/Set.html)を使用して一意性を保証します。しかし、それはあなたの既存のコードよりも複雑になりますが、これはもっと普通の方法です。 – Sangharsh

+0

公式Javaチュートリアルをお試しください。演習の1つは、カード、デッキ、ランク、スーツのクラスを作成することです。 http://docs.oracle.com/javase/tutorial/java/javaOO/QandE/creating-answers.html –

答えて

0

あなたが望むことを達成するための1つの方法は、値とスーツの両方に同じループを使用することです。これにより、リピートをより簡単に確認できます。

for (int i =0; i< value.length; i++) { 
    card = rand.nextInt(13)+2; 
    cardSuit = rand.nextInt(4) +1; 
    for(int j = 0; j <= i; j++){ 
     if(card == value[j]{ 
       card = rand.nextInt(13) + 2; 
     } 
     if(cardSuit == suit[j]{ 
       cardSuit = rand.nextInt(4) +1; 
     } 
    } 
    value[i]=card; 
    suit[i]=cardSuit; 
} 
+0

重複は引き続き表示されますが、あまり頻繁に表示されないようです。 – Sofa

1

私はあなたのカードを引く前に、あなたのデッキを構築することにより、これを行うだろう。一つの方法はhttp://docs.oracle.com/javase/7/docs/api/index.html?java/util([ `` を設定]クラス `Card`を作成して使用することである

// Use strings and pre-define our suit names. 
String[] suit = { "Hearts", "Spades", "Clubs", "Diamonds" }; 
String[] face = new String[13]; 
String[] deck = new String[52]; 

// For the number of cards of a suit 
for (int i = 1; i <= 13; i++) { 
    // Set the value of the card face; 
    String value = String.valueOf(i); 
    // Replace the value for special cards 
    if (i == 1 || i > 10) { 
     switch(i) { 
      case 11: value = "Jack"; 
       break; 
      case 12: value = "Queen"; 
       break; 
      case 13: value = "King"; 
       break; 
      default: value = "Ace"; 
       break; 
     } 
    } 

    // Set the face 2-10, Ace, Jack, Queen, King 
    face[i-1] = value; 
} 

// For each suit 
for (int s = 0; s < suit.length; s++) { 
    // and each face value 
    for (int f = 0; f < face.length; f++) { 
     // add the face of that suit to the deck 
     // (Ace, 2-10, Jack, Queen, King) of 
     // (Hearts, Spades, Clubs, Diamonds) 
     deck[(13*s)+f] = face[f] + " of " + suit[s]; 
    } 
} 

int[] handValue = new int[5]; 
int[] handSuit = new int[5]; 
int[] hand = new int[5]; 

// Draw 5 random cards 
for(int h = 0; h < hand.length; h++) { 
    int card = 0; 
    do { 
     // Do set card to a random number; 
     card = rand.nextInt(52); 
     // OR 
     // If you want to be able to valuate the cards 
     // store values separated for further calculation 
     handValue[h] = rand.nextInt(13); 
     handSuit[h] = rand.nextInt(4); 
     card = handValue[h]*(handSuit[h]+1); 
    } while (IntStream.of(hand).anyMatch(x -> x == card)) 
    // While the card is already in our hand 
    hand[h] = card; 
} 

System.out.print("\nHere are your five cards"); 
for (int j=0; j<5; j++) { 
    // Print the preformatted card value. 
    System.out.print("\n" + deck[hand[j]]); 
} 
関連する問題