这里将subList更换成遍历赋值的方法,因为:【https://blog.csdn.net/feng8403000/article/details/114797903】

多线程的目的是加上倒计时,可以自己加。

package com.item.test;import java.util.*;public class Action {public static void main(String[] args) {//随机卡牌List<Card> list=ResetCard(StartCard());//由于subList在修改的时候会出现异常,所以更换新地址
//        List<Card> one=list.subList(0,17);
//        List<Card> two=list.subList(17,2*17);
//        List<Card> three=list.subList(2*17,3*17);
//        List<Card> four=list.subList(3*17,54);List<Card> one=new ArrayList<Card>();List<Card> two=new ArrayList<Card>();List<Card> three=new ArrayList<Card>();List<Card> four=new ArrayList<Card>();for (int i = 0; i < list.size(); i++) {if(i<17){one.add(list.get(i));}else if(i<2*17){two.add(list.get(i));}else if(i<3*17){three.add(list.get(i));}else{four.add(list.get(i));}}ShowCard(one,1);ShowCard(two,1);ShowCard(three,1);ShowCard(four,0);/*** 抢地主线程*/new Thread(new Runnable() {@Overridepublic void run() {Scanner sc = new Scanner(System.in);//存储选择分数的数组int[] array=new int[3];for (int i = 0; i < 3; i++) {System.out.println("请"+(i+1)+"号农民选择分数或跳过:");System.out.println("1:1分、2:2分、3:3分、4:跳过");char choose = sc.next().charAt(0);switch (choose){case '1':array[i]=1;break;case '2':array[i]=2;break;case '3':array[i]=3;break;default:array[i]=0;break;}}if(array[0]==0&&array[1]==0&&array[2]==0){System.out.println("流局,请开启下一轮");}int index=-1;int max=-1;//根据分数进行获取地主或者流局for (int i = 0; i < array.length; i++) {if(max<array[i]){max=array[i];index=i;}}switch (index){case 0:one.addAll(four);break;case 1:two.addAll(four);break;case 2:three.addAll(four);break;}ShowCard(one,one.size());ShowCard(two,two.size());ShowCard(three,three.size());}}).run();}/*** 0、代表底牌\n17、代表农民\n20、代表地主* @param list* @param idName*/public static void ShowCard(List<Card> list,int idName){System.out.println(idName==17?"农民":(idName==20?"地主":"底牌"));for (Card c:DescCard(list)) {System.out.print(c.getName()+"\t");}System.out.println();}/*** 基本排序·Card的id由大到小* @param list* @return*/public static List<Card> DescCard(List<Card> list){Comparator<Card> cc=new Comparator<Card>() {@Overridepublic int compare(Card o1, Card o2) {return o1.getIndex()-o2.getIndex();}};Collections.sort(list,cc);//正序Collections.reverse(list);//倒序return list;}/*** 随机排序* @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(small);list.add(big);return list;}
}

效果如下:

Java扑克牌(多线程)相关推荐

  1. Oracle字符串转BooIean,利用Java的多线程技术实现数据库的访问.pdf

    利用Java的多线程技术实现数据库的访问.pdf 第 卷第 期 计算机应用 22 12 Voi .22 , No . 12 年 月 2002 12 Computer Appiications Dec ...

  2. Java 并发/多线程教程(四)-并发模型

    本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 并发系统可以有多 ...

  3. LeetCode1117. Building H2O --Java解法--多线程保证执行顺序--AtomicInteger

    此文首发于我的个人博客:LeetCode 1117. Building H2O --Java解法–多线程保证执行顺序–AtomicInteger - zhang0peter的个人博客 LeetCode ...

  4. Java 并发/多线程教程(五)-相同线程

    本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 相同线程是一并发框架模型,是一个单线程系统向外扩展成多个单线程的系统.这样的结果就是 ...

  5. java 创建多线程_Java创建多线程

    Java创建多线程 下一节> 到目前为止,我们仅用到两个线程:主线程和一个子线程.然而,你的程序可以创建所需的更多线程.例如,下面的程序创建了三个子线程: // Create multiple ...

  6. Java接口多线程并发测试 (一)

    本文为作者原创,禁止转载,违者必究法律责任!!! 本文为作者原创,禁止转载,违者必究法律责任!!! Java接口多线程并发测试 一,首先写一个接口post 请求代码: import org.apach ...

  7. Java的多线程和线程池的使用,你真的清楚了吗?

    Java的多线程和线程池的使用 多线程大大提高程序运行效率,我们在开发过程中经常会开启一个线程来执行一些费时的任务.开启一个线程有4种方式,在下面的文章我将详细的去讲解. 继承Thread 继承Thr ...

  8. 《Java程序设计》实验报告——Java的多线程机制

    浙江理工大学 <Java程序设计>  实验报告  20 19-20 20学年第 1学期      学  院 信息学院 班  级 计算机科学与技术18(3) 姓  名 申屠志刚 学  号 2 ...

  9. Java扑克牌(洗牌Collections.shuffle)

    Java.util.Collections类下有一个静态的shuffle()方法,如下: 1)static void shuffle(List<?> list)  使用默认随机源对列表进行 ...

  10. JAVA 10(多线程)

    创建线程: 通过对java.lang包的查找,继承Thread类可以创建线程 1,建立类继承Thread类 2,复写Thread中的ran方法. 3,调用线程的start()方法,该方法的作用是,启动 ...

最新文章

  1. Python解决八皇后问题
  2. Google产品主管Ken Norton的6条心得:如何招聘一位优秀的产品经理?
  3. C#中的两把双刃剑:抽象类和接口
  4. 如何利用开源项目,帮助企业免费搭建小程序官网
  5. Mybatis 实现关联表查询
  6. axis idea 设置apache_Axis2创建WebService实例 --- 接口发布
  7. stm32气压传感器 带探头的_几种常用传感器
  8. Multisim安装问题
  9. 转 【Android 应用开发】GitHub 优秀的 Android 开源项目
  10. Excel_一维二维表转换(行列转换)的几种方法
  11. python量化交易策略实例_实践《Python与量化投资从基础到实战》PDF代码+《量化交易之路用Python做股票量化分析》PDF代码解释...
  12. 学者该如何快速入门Python?内附十年Python程序员详细学习攻略
  13. 三幅图弄懂EventBus核心原理
  14. KubeVela解读
  15. C语言基本语法——循环篇(三种常见的循环)
  16. 计算机指纹识别的原理步骤,指纹识别技术的基本原理及过程
  17. 数据分析师未来发展前景如何?
  18. python怎么打印奇数菱形_python怎么打印菱形
  19. 使用命令行浏览器在 Linux 终端上网浏览
  20. 工业机器人与计算机控制,不懂工业机器人控制技术?那你一定是没看过这篇文章...

热门文章

  1. gettype获取类名_delphi – 获取属于任何类型的单元名称(TRttiType)
  2. 怎么判断网络回路_电源纹波要怎么测?
  3. android控件属性文档,1.Android控件属性收集
  4. linux 命令gpasswd -a,Linux中gpasswd命令起什么作用呢?
  5. leetcode-49-字母异位词分组
  6. Eclipse代码自动补全
  7. All in All,( UVa, 10340 )
  8. docker挂载的目录无法读写
  9. mysql允许远程访问
  10. 好久不见(致win7)