有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数组、算法和元素

我正在尝试通过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");

   }
   }

共 (2) 个答案

  1. # 1 楼答案

    您选择的术语是。。。犯错误有趣:——)

    卡的价值是“面值”,而不是符号。无论是红心还是钻石等等,这都是它的“西装”,而不是它的号码

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

    这是一种从数组中随机选择元素的巧妙方法,没有重复项。其美妙之处在于,阵列中的物品实际上不需要预先洗牌。有关其工作原理的详细信息,请参见here

  2. # 2 楼答案

    如果可以使用集合框架而不是数组,那么创建一个^{}并用所有52张卡填充它。然后调用^{}。 最后设置hand[i]=(deck name).pop()

    一旦一张牌从牌堆中弹出,它将从牌堆中移除,因此不能再次发牌