今天突然想起来以前看书的时候看见过一个编程题,要求是生成一副扑克牌并且模拟一下发牌的动作。
这个问题对很多人来说已经不是问题了,但是还是难倒了我这个刚入门的初学者。当初这个问题让我头疼的地方就是怎么去得到一个随机不重复的数组。
上网查了一查,这个其实有很多种思路。
例如:在这里就列出了Java实现随机不重复的三种思路http://www.javaeerun.com/jr_1378708438508.html
1 本身这个数组是按照顺序排放的,然后我们把这个数组里面数据的顺序打乱,再从第一个元素开始逐个获取
2 本身这个数组是按照顺序排放的,然后我们随机的从里面抽取元素发出去。
3 通过随机数直接生成随机的元素,然后比对数组里面是否有相同的元素,比对通过就放进去。
就按照做一做吧
首先是扑克牌类Card:
package com.javaeerun.demo.carddemo; public class Card { private String assortment; // 花色 private int number; // 数值 public static final String CARD_ASSORTMENT[] = { "Spade", "Heart", "Diamond", "Club", "Red Joker", "Black Joker" }; // 黑桃 红桃 方片 梅花 大王 小王 public Card(String assortment, int number) { super(); this.assortment = assortment; this.number = number; } public String getAssortment() { return assortment; } public void setAssortment(String assortment) { this.assortment = assortment; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } @Override public String toString() { return "Card [assortment=" + assortment + ", number=" + number + "]"; } }
接下来是Main:
package com.javaeerun.demo.carddemo; import java.util.LinkedList; import java.util.List; public class Main { public static void main(String[] args) { Main main=new Main(); List<Card> cardList = main.createCardList(); //获取一个按照顺序排列的扑克牌,一共54张 while(cardList.size()>0){ //只要list里面有元素就取出来 int i=(int)(Math.random()*cardList.size()); System.out.println(cardList.get(i).toString()); cardList.remove(i); //把获得的元素从list里面删除 } } public List<Card> createCardList(){ //这个方法获取一个按照顺序排列的扑克牌 List<Card> cardList = new LinkedList<Card>(); for (int i = 0; i < 4; i++) { for (int j = 1; j < 14; j++) { cardList.add(new Card(Card.CARD_ASSORTMENT[i], j)); } } cardList.add(new Card(Card.CARD_ASSORTMENT[4], 0)); cardList.add(new Card(Card.CARD_ASSORTMENT[5], 0)); return cardList; } }
这样就完成了。
相关推荐
本篇文章将深入探讨如何在Java中实现“随机不重复输出数组元素”的四种思路,这对于诸如模拟抽奖、点名等实际应用场景非常有用。 1. **基于Math.random()的解决方案** Math.random()函数可以生成0.0到1.0之间的...
在Java编程中,生成一个包含不重复随机元素的数组是一个常见的需求,特别是在模拟、测试或者游戏开发等场景中。要实现这个功能,我们可以采用多种策略,包括使用HashSet、ArrayList配合集合的remove方法,或者直接...
然后创建一个`Random`对象来生成随机索引,并使用一个`boolean`数组`used`来跟踪哪些字符已经被使用过。在循环中,我们生成随机索引,如果该字符已被使用,则跳过,否则将字符添加到结果数组`chr1`中,并标记为已...
总结来说,从n个数组中取出所有排列组合的Java实现涉及到递归算法、回溯法以及数据结构的操作。理解这些概念并能够熟练运用是成为一名优秀程序员的关键。通过这个例子,我们可以看到如何利用Java的灵活性和表达力来...
### 数组存放不重复随机数实现方法 #### 背景与目标 在日常的编程实践中,有时我们需要生成一系列不重复的随机数,并将这些数字存储到数组中以供后续处理使用。例如,在彩票系统中,为了模拟双色球等类型的彩票...
- **遍历数组**:可以使用传统的`for`循环或增强的`for`循环来遍历数组。 ```java // 使用传统for循环 for (int i = 0; i ; i++) { System.out.println(data[i]); } // 使用增强的for循环 for (int x : data...
在这里,我们将讨论如何使用Java中的Random函数来生成32位不重复的字符。 一、Java中的Random函数 Java中的Random函数是用来生成随机数的。Random函数可以生成bool、byte、char、double、float、int、long、short...
通过上述分析,我们可以清楚地了解到如何在Java中使用 `Random` 类结合字符数组和 `StringBuffer` 来生成指定长度的随机字符串。这种方法不仅适用于生成用户名,同样可以应用于密码生成等场景,具有很强的实用价值。
在Java编程语言中,随机抽取幸运观众可以通过数组来实现,这是编程中常见的一个操作,用于从一组数据中随机选择一个或多个数据项。以下是对【标题】和【描述】中所述知识点的详细说明: ### 知识点一:数组的定义和...
本文将深入探讨一种在Java中实现的高效算法,该算法能够生成指定范围内的不重复随机数数组,特别适用于随机组题等应用场景。 ### 核心知识点解析 #### 1. 算法原理 算法的核心思想是首先创建一个包含指定范围内...
在Java中,快速排序通常通过定义一个`quickSort()`方法来实现,该方法接受一个数组和两个下标作为参数,表示待排序的子数组。在实现中,需要定义一个辅助的`partition()`方法来进行分区操作。 7. **代码结构** - ...
为了生成n个不重复的随机数,我们需要使用List来存储可能出现的数字,然后随机生成索引,根据索引从List中取出一个数,并将其移除。 下面是一个生成n个不重复的随机数的示例代码: ```java import java.util....
4. 随机生成不重复的整数:Java的`java.util.Random`类可以生成随机数,通过设定范围和排除重复,可以生成[0-n)之间的不重复整数。 (二) 实验涉及的知识点: 1. 数组的定义:理解数组的基本语法,包括声明、初始化...
* ArrayList通过扩展AbstractList来实现动态数组 * LinkedList通过继承AbstractSequentialList来实现链接列表 * Vector可增长的动态数组,和ArrayList类似,线程安全,支持同步特性 * Stack继承自Vector,实现了栈的...
在Java编程中,生成一个包含随机且不重复数字的数组是一个常见的需求,特别是在进行算法练习或模拟某些随机事件时。题目要求生成一个1-100的随机数组,其中的数字不能重复,即每个位置上的数字都是随机的,但是元素...
另一种实现方式是先创建一个包含所有可能数字的数组,然后使用类似于Fisher-Yates(Knuth)洗牌算法来打乱数组顺序,这样每次取数组的第一个元素就能得到一个随机且不重复的数字。 6. **ArrayList与LinkedList**:...
2. **简化代码**:使用数组可以减少重复代码的编写,使得程序更加简洁易读。 3. **实现特定算法**:许多排序算法(如冒泡排序、插入排序等)和搜索算法(如二分查找)都需要依赖数组。 4. **提高效率**:相较于链表...
为了确保验证码不重复,可以将生成的数字存储在一个数组中,并检查新生成的数字是否已经存在。 其次,为了增强验证码的安全性,通常会混合大小写字母。我们可以扩展随机数生成的范围,覆盖26个大写和小写字母。同时...
为了确保生成的随机数列表中不包含重复的数字,代码中使用了一个循环来检查新生成的随机数是否已经存在于数组中。如果存在,则重新生成: ```java for (int j = 0; j ; j++) { if (arr[j] == arr[i]) { i--; ...
2. 集合接口:Java集合框架的核心接口有List、Set和Queue,分别对应有序列表、无序不重复集合和先进先出的队列。 3. 实现类:ArrayList实现了List接口,基于动态数组实现,适合频繁的元素访问;LinkedList实现了List...