Java扑克牌(洗牌Collections.shuffle)

举报
红目香薰 发表于 2022/01/21 23:45:43 2022/01/21
【摘要】 Java.util.Collections类下有一个静态的shuffle()方法,如下: 1)static void shuffle(List<?> list)  使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。 2)static void shuffle(List<?> list...

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()打乱会改变底层数组的顺序。代码例子如下:
 


  
  1. package com.item.test;
  2. import java.util.*;
  3. public class T1 {
  4. public static void main(String[] args){
  5. Random rand=new Random(54);
  6. Integer[] ia={0,1,2,3,4,5,6,7,8,9};
  7. List<Integer> list=new ArrayList<Integer>(Arrays.asList(ia));
  8. System.out.println("前 shufflig: "+list);
  9. Collections.shuffle(list,rand);
  10. System.out.println("后 shuffling: "+list);
  11. System.out.println("数组: "+Arrays.toString(ia));
  12. List<Integer> list1=Arrays.asList(ia);
  13. System.out.println("前 shuffling: "+list1);
  14. Collections.shuffle(list1,rand);
  15. System.out.println("后 shuffling: "+list1);
  16. System.out.println("数组: "+Arrays.toString(ia));
  17. }
  18. }

效果:

所以接上一篇文章:【Java扑克牌(enum)】


  
  1. package com.item.test;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Collections;
  5. import java.util.List;
  6. public class Action {
  7. public static void main(String[] args) {
  8. //随机卡牌
  9. List<Card> list=ResetCard(StartCard());
  10. int i=0;
  11. for (Card c:list) {
  12. if(i%3==0){
  13. System.out.println();
  14. }
  15. System.out.print(c.getIndex()+":"+c.getName()+"\t");
  16. i++;
  17. }
  18. }
  19. /**
  20. * 随机排序
  21. * @param list
  22. * @return
  23. */
  24. public static List<Card> ResetCard(List<Card> list){
  25. Collections.shuffle(list);
  26. return list;
  27. }
  28. /**
  29. * 初始化卡牌
  30. * @return
  31. */
  32. public static List<Card> StartCard(){
  33. List<Card> list=new ArrayList<>(54);
  34. int i=0;
  35. for (CardsEnum cardsEnum:CardsEnum.values()) {
  36. for (CardColorEnum cardColorEnum:CardColorEnum.values()) {
  37. list.add(new Card(cardsEnum,cardColorEnum,i++));
  38. }
  39. }
  40. Card big=new Card();
  41. big.setName(CardBossEnum.BIG.getName());
  42. big.setIndex(i++);
  43. Card small=new Card();
  44. small.setName(CardBossEnum.SMALL.getName());
  45. small.setIndex(i++);
  46. list.add(big);
  47. list.add(small);
  48. return list;
  49. }
  50. }

效果如下:

 

上篇文章地址:【https://blog.csdn.net/feng8403000/article/details/114792614

文章来源: laoshifu.blog.csdn.net,作者:红目香薰,版权归原作者所有,如需转载,请联系作者。

原文链接:laoshifu.blog.csdn.net/article/details/114793908

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。