Java扑克牌(洗牌Collections.shuffle)
JAVA collections shuffle 洗牌 扑克牌
2023-09-14 09:05:00 时间
Java.util.Collections类下有一个静态的shuffle()方法,如下:
1)static void shuffle(List<?> list) 使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。
2)static void shuffle(List<?> list, Random rand) 使用指定的随机源对指定列表进行置换,所有置换发生的可能性都是大致相等的,假定随机源是公平的。
通俗一点的说,就像洗牌一样,随机打乱原来的顺序。
注意:如果给定一个整型数组,用Arrays.asList()方法将其转化为一个集合类,有两种途径:
1)用List<Integer> list=ArrayList(Arrays.asList(ia)),用shuffle()打乱不会改变底层数组的顺序。
2)用List<Integer> list=Arrays.aslist(ia),然后用shuffle()打乱会改变底层数组的顺序。代码例子如下:
package com.item.test;
import java.util.*;
public class T1 {
public static void main(String[] args){
Random rand=new Random(54);
Integer[] ia={0,1,2,3,4,5,6,7,8,9};
List<Integer> list=new ArrayList<Integer>(Arrays.asList(ia));
System.out.println("前 shufflig: "+list);
Collections.shuffle(list,rand);
System.out.println("后 shuffling: "+list);
System.out.println("数组: "+Arrays.toString(ia));
List<Integer> list1=Arrays.asList(ia);
System.out.println("前 shuffling: "+list1);
Collections.shuffle(list1,rand);
System.out.println("后 shuffling: "+list1);
System.out.println("数组: "+Arrays.toString(ia));
}
}
效果:
所以接上一篇文章:【Java扑克牌(enum)】
package com.item.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Action {
public static void main(String[] args) {
//随机卡牌
List<Card> list=ResetCard(StartCard());
int i=0;
for (Card c:list) {
if(i%3==0){
System.out.println();
}
System.out.print(c.getIndex()+":"+c.getName()+"\t");
i++;
}
}
/**
* 随机排序
* @param list
* @return
*/
public static List<Card> ResetCard(List<Card> list){
Collections.shuffle(list);
return list;
}
/**
* 初始化卡牌
* @return
*/
public static List<Card> StartCard(){
List<Card> list=new ArrayList<>(54);
int i=0;
for (CardsEnum cardsEnum:CardsEnum.values()) {
for (CardColorEnum cardColorEnum:CardColorEnum.values()) {
list.add(new Card(cardsEnum,cardColorEnum,i++));
}
}
Card big=new Card();
big.setName(CardBossEnum.BIG.getName());
big.setIndex(i++);
Card small=new Card();
small.setName(CardBossEnum.SMALL.getName());
small.setIndex(i++);
list.add(big);
list.add(small);
return list;
}
}
效果如下:
上篇文章地址:【https://blog.csdn.net/feng8403000/article/details/114792614】
相关文章
- java中常见的运行时异常_java五种常见异常
- java locale 中国_Java描述语言、国家和地理的类——Locale
- java中scanner意思_Java中的Scanner
- java是面向对象还是面向过程_Java面向对象编程和面向过程编程的区别[通俗易懂]
- Java经典代码-冒泡排序[通俗易懂]
- java有什么作用_Java有什么用「建议收藏」
- java中的关键字有哪些_java关键字有哪些?java关键字大全
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java uuid 随机数_Java随机数和UUID[通俗易懂]
- java 缓存工具类初始化_Java缓存框架
- Java map转实体类_java实体类转json
- 开心档之Java 流(Stream)、文件(File)和IO
- Java 近期新闻:MicroProfile 6.0、Kotlin 1.8、Spring Framework 升级
- 【Java 虚拟机原理】垃圾回收算法 ( 设置 JVM 命令参数输出 GC 日志 | GC 日志输出示例 | GC 日志分析 )
- 从java到JavaScript(1),看Dart:对比Java/Go/Swift/Rust
- Java 使用 Collections.frequency 找出重复的单词详解编程语言
- Java与MySQL的实现协同(java和mysql)
- 数据库Java实现Oracle数据库监控(java监听oracle)
- 看起来很懵的java内存加载面试题详解编程语言
- 探秘Java中的String、StringBuilder以及StringBuffer详解编程语言
- Java程序员如何优雅操作Redis(java操作redis)
- 数据自动清理处理突增数据:Redis Java自动清理过期数据(redisjava过期)
- _home让Linux下Java更有效:更新Java_Home(linux更改java)
- 实现高并发:Java利用Redis秒杀成功(java秒杀redis)
- Java与MySQL的无缝衔接:实现高效数据操作(java中使用mysql)
- Java程序在Linux系统中实现命令操作(java运行linux命令)
- Java技术将数据写入Oracle数据库(java写入oracle)