数组,算法和元素

时间:2013-10-07 02:38:07

标签: java arrays element

我正在尝试通过java制作扑克游戏。 我想做的第一件事是使用数组分发5张卡片。我已经完成了分发部分,但是如何防止相同的卡分发两次。换句话说,我如何检查数组是否已包含元素。我希望它能够检测元素是否已经存在于数组中,如果确实存在,我希望能够只更改已经发出两次的那张卡,非常感谢帮助。 我的代码在下面,

      import java.util.Random;
      import java.util.Scanner;
      import java.util.Arrays;


    public class Poker
    {
        public final static String[] numbers = {"❤","♠","♦","♣"};  
        public final static String[] sign = {"1","2","3","4","5","6","7","8","10","J","Q","K","A"};
        private String[] hand = {"","","","",""};
        private boolean found;
        private Random random;

       public Poker()

        {

           found = false;
           String hand[] = {"","","","",""};
           int tokens = 10;

           Scanner in = new Scanner(System.in);
           random = new Random();
        }

       public void handOut()
        {

           for (int i = 0; i < 5; i++)
           {
               int numberRandom = random.nextInt(numbers.length);
               int signRandom = random.nextInt(sign.length);
               String pickedNumber = numbers[numberRandom];
               String pickedSign = sign[signRandom];
               String combinedSigns = pickedSign + pickedNumber;
               hand[i] = combinedSigns;
           System.out.print(hand[i] + " ");

       }
        System.out.println("\n");

   }
   }

3 个答案:

答案 0 :(得分:2)

您选择的术语是......错误的......有趣的: - )

卡片值是“面值”,而不是符号。无论是心形还是钻石等,这都是它的“套装”,而不是它的数量。

但是,关于这个问题。我相信最好的方法是用你的facevalue构建一个完整的52张牌,然后使用Fisher Yates shuffle来分发牌。

这是从数组中随机选择元素而不重复的一种很好的方法。美丽的是,阵列中的物品实际上并不需要在前面洗牌。有关其工作原理的详细信息,请参见here

答案 1 :(得分:2)

如果您可以使用集合框架而不是数组,请创建一个Stack并使用所有52张卡填充它。然后打电话给Collections.shuffle()。 最后设置hand[i]=(deck name).pop()

一旦卡片从卡片中弹出,它将从卡座上移除,因此无法再次处理。

答案 2 :(得分:1)

您要做的是将代码分解为不同的方法。您应该有一种生成一张卡片的方法,一种检查卡片是否在手中的方法,以及将卡片分发到手上的方法。

public String generateCard() {
    int numberRandom = random.nextInt(numbers.length);
    int signRandom = random.nextInt(sign.length);
    String pickedNumber = numbers[numberRandom];
    String pickedSign = sign[signRandom];
    return pickedSign + pickedNumber;
}

public static boolean cardIsInHand(String card) {
    for(int i = 0; i < 5; i++) {
        if(hand[i] != null && hand[i].contains(card)) {
            return true;
        }
    }

    return false;
}

public static void handout() {
    for (int i = 0; i < 5; i++) {
        String card = generateCard();

        while(cardIsInHand(card)) {
            card = generateCard();
        }

        hand[i] = card;
    }
}