簡體   English   中英

Java For-Each循環處理多手牌

[英]Java For-Each Loop to Deal to multiple Hands

我正試圖找到一種很好的方法來向4手牌“交易”牌。

         System.out.println("Deal to 4 Hands: "); 

         Hand hand1 = new Hand();
         Hand hand2 = new Hand();
         Hand hand3 = new Hand();
         Hand hand4 = new Hand();

         hand1.addSingleCard(Deck.deal());
         hand2.addSingleCard(Deck.deal());             
         hand3.addSingleCard(Deck.deal());
         hand4.addSingleCard(Deck.deal());

         hand1.addSingleCard(Deck.deal());
         hand2.addSingleCard(Deck.deal());            
         hand3.addSingleCard(Deck.deal());
         hand4.addSingleCard(Deck.deal());

         System.out.println("Cards left in deck: " + Deck.size());

         System.out.println("Player 1's Hand: \n" + hand1.getHand());
         System.out.println("Player 2's Hand: \n" + hand2.getHand());
         System.out.println("Player 3's Hand: \n" + hand3.getHand());
         System.out.println("Player 4's Hand: \n" + hand4.getHand());

是否有更簡單的方法來處理手? 例如,使用For-Each循環?

我試過這個:但它不起作用。 我還沒有真正使用過這種類型的循環......

         for(Hand card : hand1){
            System.out.println("Player 1's Hand: \n" + hand1);
         }

順便說一句,這會將2張牌交給4手牌,然后打印每只手牌。

創建一個數組!

Hand[] hands = new Hand[4];

// create Hand object within the array and deal a single card to each hand
for(int i = 0; i < hands.length; i++) {
    hands[i] = new Hand();
    hands[i].addSingleCard(Deck.deal());
}

// deal an additional card to each hand (use a nested loop for dealing additional cards, if necessary)
for(int i = 0; i < hands.length; i++) {
    hands[i].addSingleCard(Deck.deal());
}

System.out.println("Cards left in deck: " + Deck.size());

for(int i = 0; i < hands.length; i++) {
    System.out.printf("Player %d's hand: \n %s\n", i+1, hands[i]);
}

此數組包含4個單獨的Hand對象,並允許您通過遍歷數組對所有指針執行操作。

如果每個手(hand1,hand2等)有四個不同的命名變量,則沒有簡單的方法對它們所代表的對象執行操作,而無需在操作中顯式使用變量名(hand1.dealSingleCard()等)。

循環數組是要走的路:)

嘗試這個:

 System.out.println("Deal to 4 Hands: "); 

 Hand[] hands=new Hand[4];
 for(int i=0;i<hands.length;i++)
      hands[i]=new Hand();
 for(Hand hand:hands)
      hand.addSingleCard(Deck.deal());
 for(Hand hand:hands)
      hand.addSingleCard(Deck.deal());
 System.out.println("Cards left in deck: " + Deck.size());
 for(int i=0;i<hands.length;i++)
      System.out.println("Player "+i+"'s Hand: \n" + hands[i].getHand());

您的for循環不起作用,因為您將一個Hand對象作為項目進行迭代。 我並不是100%熟悉這種for循環風格的所有應用程序,但根據我的經驗,它用於遍歷對象列表。 所以你想要做這樣的事情:

     System.out.println("Deal to 4 Hands: "); 

     Hand hand1 = new Hand();
     Hand hand2 = new Hand();
     Hand hand3 = new Hand();
     Hand hand4 = new Hand();

     List<Hand> handList = new ArrayList<Hand>();
     handList.add(hand1);
     handList.add(hand2);
     handList.add(hand3);
     handList.add(hand4);

     for (Hand currHand : handList) {
         currHand.addSingleCard(Deck.deal());
         currHand.addSingleCard(Deck.deal());
     }

我意識到我沒有使用for循環添加到列表中,但我正在工作,復制粘貼比從頭開始寫更容易。

將您的手存放在數組(或List)中,並使用兩個嵌套循環:

for (int i = 0; i < 2; i++) {
    for (Hand hand : hands) {
        hand.addSingleCard(Deck.deal());
    }
}

您只能在實現Iterable的類上使用ForEach循環

這樣的東西可以工作(雖然沒有經過測試):

Hand hands[] = new Hand[] {hand1, hand2, hand3, hand4};
for (int i=0; i<2; i++) {               // deal 2 cards
    for (Hand currentHand: hands) {     // to each hand
         currentHand.addSingleCard(Deck.deal());
    }
 }

for (int i=0; i<hands.length; i++)  {
     System.out.println("Player " + i + "'s Hand: \n" + hands[i].getHand());
}

怎么樣:

for(int j=0; j<MAX_NUMBER_OF_DEALS_PER_PLAYER;j++)
{
  for(int i=0; i<MAX_HAND_SIZE;i++)
  {
    handsArray[i].addSingleCard(Deck.deal());
  }
}

然后,您可以將交易數量設置為2,例如,復制您的示例。 手的大小取決於你想玩的游戲類型。

當然,您需要首先初始化數組,例如:

Hand[] handsArray = new Hand[MAX_NUMBER_OF_PLAYERS];
for(int i=0;i<MAX_NUMBER_OF_PLAYERS;i++)
{
  handsArray[i] = new Hand();

}

這是你在找什么?

如果你想使用foreach循環,你當然可以做你發布的內容:

for(Hand card : hand1){
  System.out.println("Player 1's Hand: \n" + card); //notice it needs to be card here, NOT hand1
}

除非您需要在此處將hand1更改為卡,否則請在手中打印每張卡。 否則你將只為每張卡打印相同的值(hand1),所以如果你有3張牌,它將打印hand1的值3次。

要使用for-each循環,您需要某種Iterable,可以是Collection(即List)或數組。 在這種情況下,您的代碼可以大大簡化:

private static final NUM_HANDS = 4;
System.out.println("Deal to 4 Hands: "); 
List<Hand> hands = new ArrayList<Hand>();
for(int i=0; i<NUM_HANDS) {
    hands.add(new Hand());
    hand.addSingleCard(Deck.deal());
}
int handNum = 1;
for (Hand hand: hands) {
    hand.addSingleCard(Deck.deal());
    System.out.println("Player " + handNum + "'s Hand: \n" + hand.getHand());
    handNum++;
}
System.out.println("Cards left in deck: " + Deck.size());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM