2016-03-06 81 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 –