生成随机PrintCard的方法

时间:2014-10-16 04:35:21

标签: java

我需要在我的程序中使用public static void PrintCard (int number, int suit)作为标题来打印5张随机卡(数字和套装)示例"黑桃王牌"。

我不完全确定该去哪里,但我想知道是否有办法随机生成number = Ace等等,因为Ace不是变量我得到的一个错误。

示例:0 = Ace(由于错误的一边因为变量而无法工作)和

number == 0
return Ace;

这些是我尝试过的东西,对不起,如果它真的很宽泛等等。在编码方面,我只是非常迷失和新手。

编辑:

#  Card
_______
0  Ace 
1  Two
2  Three
3  Four
4  Five
5  Six
6  Seven
7  Eight
8  Nine
9  Ten
10 Jack
11 Queen
12 King

#  Suit
_______
0 Spaces
1 Hearts
2 Clubs
3 Diamonds

您的计划结构


import....

class {

  main method {
    num
    suit

    loop {
      loop 5x {
         num = generate random number 0-12
         suit = generate random number 0-3
         PrintCard (num, suit)
      }
      Prompt the user to continue
      read input from the user into a string
      if (input is yes)
         stay inside this loop, otherwise get out
     }
  }

  PrintCard (number, suit) {
    switch (number)
      // print the word for the card value
    print " of "
    switch (suit)
      // print the word for the card suit
  }

}

2 个答案:

答案 0 :(得分:1)

您可以将face和suit名称放入String数组中,然后从每个数组中选择一个随机条目。首先,您需要一种从阵列中随机选择项目的方法。像,

private static Random rand = new Random();
public static <T> T randomEntry(T[] arr) {
    return (arr != null) ? arr[rand.nextInt(arr.length)] : null;
}

然后您可以生成卡片名称并将其添加到LinkedHashSet(以保留插入顺序),直到您有5个条目,

String[] names = { "Ace", "Deuce", "Trey", "Four", "Five", "Six",
        "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
String[] suits = { "Spades", "Clubs", "Hearts", "Diamonds" };
Set<String> cards = new LinkedHashSet<>();
while (cards.size() < 5) {
    cards.add(String.format("%s of %s", randomEntry(names), 
        randomEntry(suits)));
}

然后你的输出只是

for (String card : cards) {
    System.out.println(card);
}

答案 1 :(得分:0)

在开始编写代码之前,我建议您使用经典的笔和纸进行一些规划。您可以通过几个步骤来帮助您简化工作。
首先,记下您希望程序拥有的 WHAT 。在您的示例中,它可以是这样的:

  • 生成卡的随机诉讼
  • 生成卡片的随机数
  • 存储生成的卡片
  • 以5个为一组存储生成的卡
  • 打印出结果

执行此操作后的下一步是询问并回答猜测如何您可以执行列表中的操作。例如:

  • 如何生成随机套装或号码? Java有一个名为Random的类。可以找到所有方法here

  • 如何存储生成的卡? Java有很多用于存储数据集的实用程序。例如ArrayList。可以找到所有方法和信息here

有13张牌适合。有4套西装。因此,您必须有两个ArrayList来存储卡片和套装的所有命名。
您必须生成2个不同的整数:0-12和0-3。
您必须将生成的卡存储在另一个ArrayList中,以便日后访问。
循环过程,就你所做的而言,没有任何东西可以打印出从Array中得到的结果。

UPD1代码示例:    
以下是您可能需要的代码示例:

    //variables to store generated card as string

    private String generatedCard;
   //create Array list for suits
  ArrayList<String> suits = new ArrayList<>();
  //fill the List
  suits.add("spades"); //index no [0]
  suits.add("hearts");
  suits.add("diamonds");
  suits.add("clubs"); //index no [3]
  //create Array list for numbers
   ArrayList<String> numbers = new ArrayList<>(); 
  //fill the list
   - - - -
  //create ArrayList for generated Cards
   ArrayList<String> cards = new ArrayList<>();
  //create Randomiser
    Random rnd = new Random();
  for (int i = 0; i <5; i++){
        generatedCard = ""+suits.get( rnd.nextInt(4)) + " " + numbers.get(rnd.nextInt(13)); 
      cards.add(i, generatedCard);
  }   

使用System.out.println(cards.get(indexer));

打印出用于循环的用法