2011-03-06 125 views
0

我創建的紙牌遊戲程序應提示用戶輸入玩家人數以及每隻手中有多少張牌,然後洗牌,然後交易牌,然後顯示牌在每個球員手中。除非卡組中沒有足夠的卡牌(我們不能在52張卡組中處理10張10張卡牌),否則它會爲所有玩家顯示手牌。如何在java中打印嵌套在數組中的對象

我已經創建了Card類,Deck類,Hand類和驅動程序來運行程序。由於這是一項任務,我必須遵守規定,所以我只允許使用數組,而不是數組列表。我的問題是,我無法弄清楚如何在Hand對象內部打印Card對象。還有一種更好的方法可以做到這一點,但我僅限於允許導入/使用的內容。我可以獲得有關在嵌套數組內尋找打印對象的幫助嗎?由於沒有對象名稱,我無法使用Hand類中編寫的方法將數組添加到數組中的Hands中。

編輯︰我有Hand類中的構造函數創建一個手傳遞給它的int大小。令人困惑的是,當我得到有多少玩家確實在玩用戶遊戲時,我在驅動程序中創建了一個類型爲Hand的數組,該數組中充滿了使用循環的新Hand對象。那時我不知道如何引用每個單獨的手對象,所以我可以使用toString()打印內容。他們似乎沒有名字。

代碼遵循:

import java.util.Arrays; 
import java.util.Scanner; 
public class CardsDriver { 

public static void main(String[] args) 
{ 
    Card c1 = new Card();  //create new card object 
    Scanner kb = new Scanner(System.in); 
    int cards; 
    int players; 


    System.out.print("How many players are in the game?"); 
    players = Integer.parseInt(kb.nextLine()); 
    System.out.print("\nHow many cards will be dealt to each player?"); 
    cards = Integer.parseInt(kb.nextLine()); 

    while ((cards * players) > 52) 
    { 
     System.out.print("There are not enough cards in the deck to deal " + 
         players + " hands of " + cards + " cards. try again."); 

     System.out.print("How many players are in the game?"); 
     players = Integer.parseInt(kb.nextLine()); 
     System.out.print("\nHow many cards will be dealt to each player?"); 
     cards = Integer.parseInt(kb.nextLine()); 
    } 

    Deck readyDeck = new Deck(); //create new deck 
    readyDeck.shuffleDeck();  //shuffle the newly built deck using Java.Util.Random 
    Hand[] playerHands= new Hand[players]; //create another array to hold all player hands 

    for(int index =0; index < playerHands.length; index++) 
    { 
     playerHands[index] = new Hand(cards); //create hand object for each player of the size input by the player 
     /*for (int index2 =0; index2<cards;index2++) 
     { 
      //fill each hand with cards using addcard somehow. i have no object name. 
      Hand.addCard(readyDeck.dealACard()); 
     }*/ 
    } 
} 
+2

我不明白......這個問題是怎麼回事? : - \但我會回答「覆蓋toString」的方法....這是最有可能的答案。 – st0le 2011-03-06 16:10:29

回答

2

假設你已經覆蓋每一個提到的類的toString方法,打印出陣列應儘可能調用Arrays.toString()方法(而不是僅僅傳遞數組引用一樣簡單System.out.println()及其變種。

如果你想知道如何處理這種嵌套的數組,甲板類的toString()方法會涉及調用卡陣列上的Arrays.toString方法。

例子:

class Card { 

    int suit, rank; 

    @Override 
    public String toString() { 
     // outputs something like ACE of SPADE 
     return suitToName(suit) + " of " + rankToName(rank); 
    } 

} 

class Deck { 

    private Card[] cards; 

    private String name; 

    @Override 
    public String toString() { 
     // prints : MyDeck -> [ACE of SPADE, ACE of HEART] etc. 
     return name + " -> " + Arrays.toString(cards); 
    } 

} 

順便說一句,我認爲你應該爲枚舉排名和西裝,而不是整數亂搞。這應該是更清潔我應該說。

+0

我遇到的問題是我很困惑要傳遞給toString方法,因爲我沒有卡或手對象的實際名稱。它們是在循環中創建的,我可能會錯過一些東西。 – sudoshakes 2011-03-06 16:37:56

+0

@sudoshakes:我認爲你對使用'toString'方法感到困惑;看到我更新的答案。 – 2011-03-06 16:48:57

+0

我正在使用枚舉,但傳遞給該方法的整數是mod分割得到一個枚舉 – sudoshakes 2011-03-06 17:16:21

0

要覆蓋它,您可以在較新版本的Eclipse中使用新嚮導,也可以使用我曾寫過的插件,如JUtils ToString Generator

+0

我意識到我cna重寫toString()方法,我不知道如何使用Hand對象中Hand對象中的卡片。 – sudoshakes 2011-03-06 16:44:10

1

爲桑傑建議你應該添加到您的卡類:

@Override 
public String toString() { 
... 
} 

就用cardinstance.toString(),每當你想打印卡的對象,無論它在哪裏。

我不知道你在做什麼,但這裏是一個很好的Java編程例子(用於創建Texas Hold Em)。

http://code.google.com/p/texasholdem-java/source/checkout

結帳這個看其如何處理得當,你是好去與任何的紙牌遊戲。

+0

Card類的構造函數使用pass整數創建卡片,並使用mod除法來返回枚舉的臉部和套裝類型的序數值。 – sudoshakes 2011-03-06 16:39:30

+0

哎呦打得太快。然後我有Hand類中的構造函數,根據傳遞給它的int值創建一個大小。令人困惑的是,當我得到有多少玩家確實在玩遊戲時,我在驅動程序中創建了一個類型爲Hand的數組,它使用循環充滿了新的Hand對象。那時我不知道如何引用每個單獨的手對象,所以我可以使用toString()打印內容。 – sudoshakes 2011-03-06 16:41:53

+0

@sudoshakes對不起,現在沒有多少時間,你可以在調試模式下捕捉它嗎? – ant 2011-03-06 17:06:59

相關問題