Java中如何从二维String类型数组中随机选取元素
随机抽取扑克牌功能实现方案
核心思路
你的二维牌组数组第一维对应4种花色,第二维对应每种花色的13张卡牌,只要分别生成两个维度的合法随机下标,就能取出随机卡牌:
- 第一维下标范围:
0 ~ 3(对应数组长度4,取下界不取上界的随机方法直接传数组长度即可) - 第二维下标范围:
0 ~ 12(对应每个子数组长度13,同理直接传子数组长度即可)
基础实现代码(单次抽牌)
import java.util.Random; public class RandomCardDemo { public static void main(String[] args) { // 你定义的牌组数组 String[][] cardDeck = { {"AceH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JackH", "QueenH", "KingH"}, {"AceD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JackD", "QueenD", "KingD"}, {"AceS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JackS", "QueenS", "KingS"}, {"AceC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JackC", "QueenC", "KingC"} }; // 初始化随机数生成器 Random random = new Random(); // 生成随机花色下标 int suitIndex = random.nextInt(cardDeck.length); // 生成对应花色下的随机卡牌下标 int cardIndex = random.nextInt(cardDeck[suitIndex].length); // 取出随机卡牌 String randomCard = cardDeck[suitIndex][cardIndex]; System.out.println("抽到的卡牌是:" + randomCard); } }
扩展场景:多次抽牌不重复(适合发牌)
如果需要抽多张牌且不会抽到重复卡牌,可以先把二维数组转成一维List,调用Collections.shuffle()打乱顺序后,按顺序取元素即可:
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class NonDuplicateRandomCard { public static void main(String[] args) { String[][] cardDeck = { {"AceH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JackH", "QueenH", "KingH"}, {"AceD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JackD", "QueenD", "KingD"}, {"AceS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JackS", "QueenS", "KingS"}, {"AceC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JackC", "QueenC", "KingC"} }; // 二维数组转一维List List<String> cardList = new ArrayList<>(); for (String[] suit : cardDeck) { Collections.addAll(cardList, suit); } // 打乱牌组顺序 Collections.shuffle(cardList); // 示例:连续抽5张不重复的牌 for (int i = 0; i < 5; i++) { System.out.println("第" + (i+1) + "张牌:" + cardList.get(i)); } } }
内容的提问来源于stack exchange,提问作者Hi I'm Justin
相关产品推荐
相关产品推荐

