[英]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.