首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组、算法和元素

数组、算法和元素
EN

Stack Overflow用户
提问于 2013-10-07 02:38:06
回答 3查看 100关注 0票数 0

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

代码语言:javascript
复制
      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");

   }
   }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-07 02:55:03

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

代码语言:javascript
复制
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;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-10-07 02:45:36

你选择的术语是..。呃..。有趣:-)

卡值是一个“面值”,而不是一个符号。不管是心还是钻石等等,那是它的“西服”,而不是它的号码。

但是,关于这个问题。我相信最好的方法是从你的面容和西装阵列中构建一个完整的52张牌,然后使用费舍尔·耶茨洗牌来分发卡片。

这是一种从没有重复的数组中随机选择元素的好方法。其优点是数组中的项目实际上不需要预先调整。有关其工作方式的详细信息可以找到here

票数 2
EN

Stack Overflow用户

发布于 2013-10-07 02:45:38

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

一旦一张牌从堆栈中弹出,它就会从甲板上被移除,这样它就不能再被处理了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19216306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档