2016-03-06 83 views
0

我認爲我已完成前3個步驟,所以請嘗試幫助我解決最後一個問題,我似乎遇到了多維陣列的問題,我必須打印派對名片和卡片: 步驟來做的程序:用於打印卡片的Java多維陣列

1)使用Math.random()和其餘運算符生成52到52不同的數字從0到51.這些數字將代表一副牌,我們稱之爲deckOfCard。 (現在你有一個大小爲52的一維數組)。對於這一步,你應該寫一個名爲generateCard的方法,它不返回任何內容,而是接受一個參數,這個參數是表示卡片組的數組變量(通過引用傳遞數組)。

2)爲了確保程序正常工作,在繼續下一步之前,應該在生成陣列時打印數字。編寫一個名爲printCard的方法,它不返回任何內容,但接受3個參數,如下所示:(1)數組,(2)每行輸出的數量,以及(3)每個輸出的寬度。您將調用此方法以每行13個數字和每個數字5個空格的格式打印數組的內容。

3)使用代表4手牌的4x13的二維數組。讓我們稱它爲手。寫一個叫做deal的方法,它接受兩個參數,一個是deckOfCard,另一個是手。此方法將該卡分發給四方(假設分發順序爲東,北,西和南)。

要確保您的第4步工作正常,您應該先撥打打印卡,然後再轉到下一步。

4)假設Spade的取值範圍是0到12,Heart取值從13到25,Diamond取值從26到38,Club取值從39到51.您將編寫一個名爲printHands的方法,每一方的手都類似於以下內容。 NORTH S:AQJ 10 9 2 H:Ĵ8 2 d:K C:AJ 9 同樣爲其它方向 爲此,一個簡單的方法是建立的4x4x13 3維陣列,讓我們稱它爲四層。第一個維度表示一副牌,每個第一維表示每個玩家擁有的牌。最初所有值都是0,表示沒有任何玩家擁有。第二和第三維將代表特定的卡片。如果某張卡片由某一方持有,則特定插槽的值將從「0」更改爲「1」。最終,將有總共52「1'和每一方(或每​​個所述第一維度的)將包含13個非重疊的」 1'

赫雷什我現在所擁有的代碼:

public class DeckOfCard { 
public static void main(String[] args) { 
    int[] deckOfCard = new int[52]; 
    int[][] hands = new int[4][13]; 
    int[][][] fourDecks = new int[4][4][13]; 
    generateCard(deckOfCard); 
    printCard(deckOfCard, 13, 5); 
    deal(deckOfCard, hands); 
    printHands(deckOfCard, 4, 13); 

} 
public static void generateCard(int[] deckOfCard) { 

    //Initialize the cards 
    for (int i = 0; i < deckOfCard.length; i++) 
     deckOfCard[i] = i; 


    //Shuffle the Cards 
    for (int i = 0; i < deckOfCard.length; i++) { 
     //Generate an index randomly 
     int index = (int)(Math.random() * deckOfCard.length); 
     int temp = deckOfCard[i]; 
     deckOfCard[i] = deckOfCard[index]; 
     deckOfCard[index] = temp; 
    } 
} 

public static void printCard(int [] deckOfCard, int column, int width) {  
    for (int i = 1; i <= deckOfCard.length; i++) { 
     System.out.printf("%"+ width + "d" , deckOfCard[i-1]); 

     if (i % column == 0) System.out.println(); 
    } 
} 

public static void deal(int[] deckOfCard, int[][] hands) { 
    for(int i = 0; i < deckOfCard.length; i++) { 
     for(int row = 0; row <= 3; row++) { 
      for(int column = 0; column < 13; column++) { 
       hands[row][column] = deckOfCard[i]; 
       i++; 
       System.out.println(hands[row][column]); 
      } 
     } 
    } 
} 

public static void printHands(int[] deckOfCard, int suit, int rank) { 
    String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"}; 
    String[] cases = {"EAST", "NORTH", "WEST", "SOUTH"}; 
    String[] ranks = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; 

    for (int i = 0; i < deckOfCard.length; i++) { 
     String suit1 = suits[deckOfCard[i]/13]; 
     String rank1 = ranks[deckOfCard[i] % 13]; 
     System.out.println(cases + " : " + deckOfCard[i]); 
    } 
} 

}

+0

請使用正確的標識代碼。 –

+0

我嘗試,但它自己搞砸 –

+0

你可以簡短嗎? –

回答

1

首先你的deal方法不太對。您的指示說,你必須處理在同一時間您的甲板上一位玩家的牌,所以你必須嵌套循環語句是不同的:

public static void deal(int[] deckOfCard, int[][] hands) { 
    for(int i = 0; i < deckOfCard.length;) { 
      for(int j = 0; j < 13; j++) { 
       for(int p = 0; p < 4; p++) { 
       hands[p][j] = deckOfCard[i]; 
       i++; 
       System.out.println(hands[p][j]); 
      } 
     } 
    } 
} 

否則,你正在處理13張的第一個球員,然後13第二個,等等。現在

在4您的指示,說,你應該採取的陣列int[][] hands,並把它變成一個int[][][]printHands方法,其中第一維代表球員,第二代表套件卡,以及3號「值」。假設0是王牌,1-12是2到K,你應該從類似的東西開始:

public static void printHands(int[][] hands) { 
    String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"}; 
    String[] ranks = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; 
    String[] cases = {"EAST", "NORTH", "WEST", "SOUTH"}; 

    int[][][] fourDecks = new int[4][4][13]; 

    for(int i = 0 ; i < hands.length ; i++) { 
     for(int j = 0 ; j < hands[i].length ; j++) { 
      int card = hands[i][j], s = card/13; 

      fourDecks[i][s][card%13] = 1; 
     } 
    } 

    //print cards to console 
    for(int i = 0 ; i < fourDecks.length ; i++) { 
     System.out.print(cases[i]+" "); 

     for(int j = 0 ; j < fourDecks[0].length ; j++) { 
      System.out.print(suits[j] + ": "); 

      for(int k = 0 ; k < fourDecks[0][0].length ; k++) { 
       if(fourDecks[i][j][k] == 1) System.out.print(ranks[k] + " "); 
      } 
     } 

     System.out.println(); 
    } 
} 
+0

我仍然得到同樣的東西,不能弄清楚如何打印所需的輸出。 –

+0

在這裏,我添加了一個如何打印卡片的示例 – Maljam

+0

感謝有什麼方法可以按升序或降序打印卡片?像A J 10 9 7或7 9 J Q K –