首先,先创建一个Gammer类与一个Poker类。

/*

* Gammer类包含int类型的id属性与String类型的name属性!

* id用int类型是为了测试后面创建用户时输入异常的情况。

*/

public class Gammer {

public int id;

public String name;

public List pokers;

public Gammer(int id,String name){

this.id=id;

this.name=name;

this.pokers=new ArrayList();

}

public Gammer(){

}

}

/*

* Poker类包含四个属性分别为:

* String number 表示扑克牌的点数

* String colors 表示扑克牌的花色

* Integer colornb 表示扑克牌花色的大小,方便比较(用Integer类型定义,是因为用colletions.sort()方法排序的时候只能用int型的包装类)

* Integer numbernb 表示扑克牌牌面的大小,方便比较(用Integer类型定义,是因为用colletions.sort()方法排序的时候只能用int型的包装类)

*/

public class Poker implements Comparable {

public String number;

public String colors;

public Integer colornb;

public Integer numbernb;

public Poker(String number,String colors,int colornb,int numbernb){

this.number=number;

this.colors=colors;

this.colornb=colornb;

this.numbernb=numbernb;

}

public Poker(){

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + ((colors == null) ? 0 : colors.hashCode());

result = prime * result + ((number == null) ? 0 : number.hashCode());

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (!(obj instanceof Poker))

return false;

Poker other = (Poker) obj;

if (colors == null) {

if (other.colors != null)

return false;

} else if (!colors.equals(other.colors))

return false;

if (number == null) {

if (other.number != null)

return false;

} else if (!number.equals(other.number))

return false;

return true;

}

/*

* 重写compareTo方法

* 当牌面大小不相同的时候直接比较牌面的大小

* 当牌面大小相同比较花色。

*/

@Override

public int compareTo(Poker o) {

if(this.numbernb.compareTo(o.numbernb)!=0)

return this.numbernb.compareTo(o.numbernb);

else

return this.colornb.compareTo(o.colornb);

}

}

创建一个类,改类包含了实现该练习功能的方法,方便在main函数中调用。

public class User {

public Map user=new HashMap();

public List pokerToSelect=new ArrayList();

public Poker[] poker=new Poker[]{new Poker("A","方块",1,14),new Poker("K","方块",1,13),new Poker("Q","方块",1,12),new Poker("J","方块",1,11),new Poker("10","方块",1,10),new Poker("9","方块",1,9),new Poker("8","方块",1,8),new Poker("7","方块",1,7),new Poker("6","方块",1,6),new Poker("5","方块",1,5),new Poker("4","方块",1,4),new Poker("3","方块",1,3),new Poker("2","方块",1,2),

new Poker("A","梅花",2,14),new Poker("K","梅花",2,13),new Poker("Q","梅花",2,12),new Poker("J","梅花",2,11),new Poker("10","梅花",2,10),new Poker("9","梅花",2,9),new Poker("8","梅花",2,8),new Poker("7","梅花",2,7),new Poker("6","梅花",2,6),new Poker("5","梅花",2,5),new Poker("4","梅花",2,4),new Poker("3","梅花",2,3),new Poker("2","梅花",2,2),

new Poker("A","红桃",3,14),new Poker("K","红桃",3,13),new Poker("Q","红桃",3,12),new Poker("J","红桃",3,11),new Poker("10","红桃",3,10),new Poker("9","红桃",3,9),new Poker("8","红桃",3,8),new Poker("7","红桃",3,7),new Poker("6","红桃",3,6),new Poker("5","红桃",3,5),new Poker("4","红桃",3,4),new Poker("3","红桃",3,3),new Poker("2","红桃",3,2),

new Poker("A","黑桃",4,14),new Poker("K","黑桃",4,13),new Poker("Q","黑桃",4,12),new Poker("J","黑桃",4,11),new Poker("10","黑桃",4,10),new Poker("9","黑桃",4,9),new Poker("8","黑桃",4,8),new Poker("7","黑桃",4,7),new Poker("6","黑桃",4,6),new Poker("5","黑桃",4,5),new Poker("4","黑桃",4,4),new Poker("3","黑桃",4,3),new Poker("2","黑桃",4,2)};

public int usercount;

/*

* numberOfUser()方法是用来实现输入玩家人数,实现多人玩游戏。

* 当输入出现异常的时候抓住异常,并抛出异常让main方法去处理。

*/

public void numberOfUser(){

System.out.println("--------请输入玩家人数---------");

try{

Scanner input=new Scanner(System.in);

int usercount2=input.nextInt();

usercount=usercount2;

}catch(InputMismatchException e){

System.out.println("请输入正整数!");

InputMismatchException newExc=new InputMismatchException();

newExc.initCause(e);

throw newExc;

}

}

/*

* bulidgammer()方法用来创建玩家

* 当输入异常的时候抓住异常,并抛出异常让main方法去处理

*/

public void bulidgammer(){

try{

Scanner input=new Scanner(System.in);

while(user.size()

System.out.println("请输入第"+(user.size()+1)+"名玩家ID");

int id=input.nextInt();

//System.out.println("id:"+id);

Gammer gm=user.get(id);

if(gm==null){

System.out.println("请输入玩家的姓名");

String name =input.next();

Gammer gmm=new Gammer(id,name);

user.put(id, gmm);

}

else{

System.out.println("该ID已经存在,请重新输入");

continue;

}

}

Set idset=user.keySet();

for(int kid:idset){

Gammer gm=user.get(kid);

if(gm!=null)

System.out.println("欢迎玩家:"+gm.name);

else

continue;

}

}catch(InputMismatchException e){

System.out.println("请输入正整数!");

InputMismatchException newExc=new InputMismatchException();

newExc.initCause(e);

throw newExc;

}

}

/*

* shuffle()方法是用来洗牌的

* 该实现方法主要是先随机抽出26张牌依次放入pokerToSelect

* (可随机抽取更多的牌,但是因为每次都在52张牌里面抽,抽得越多重复得几率就越大,所以要抽出不同的牌花费的时间就越多。)

* 再把剩下的依次放进pokerToSelect

*/

public void shuffle(){

Random rd=new Random();

int k;

System.out.println("---------开始洗牌---------");

for(int i=0;i<26;i++){

do{

k=rd.nextInt(52);

//System.out.println("k的值为:"+k);

}while(pokerToSelect.contains(poker[k]));

pokerToSelect.add(poker[k]);

}

for(int j=0;j<52;j++){

if(!(pokerToSelect.contains(poker[j])))

pokerToSelect.add(poker[j]);

}

System.out.println("---------洗牌完成---------");

}

/*

* FP()方法用于发牌与比较玩家牌面的大小,并决出胜者。

*/

public void FP(){

Gammer[] gmm=new Gammer[user.size()];

System.out.println("开始发牌");

Set IDset=user.keySet();

int k=0;

for(int id:IDset){

gmm[k]=user.get(id);

k++;

}

k=0;

// System.out.println("user:"+user.size());

/*发牌,每个玩家两张牌,从pokerToSelect的第一张牌开始发*/

for(int i=0;i<2;i++){

for(int j=0;j

System.out.println(gmm[j].name+"拿牌");

gmm[j].pokers.add(pokerToSelect.get(k));

k++;

}

}

System.out.println("发牌完成!");

/*用Collections.sort()方法对每个玩家的牌进行排序,显示每个玩家所得到的牌。并选出最大的牌*/

for(int i=0;i

Collections.sort(gmm[i].pokers);

k=1;

for(Poker pk:gmm[i].pokers){

System.out.println("玩家"+gmm[i].name+"第"+k+"张牌为:"+pk.colors+pk.number);

k++;

}

System.out.println("玩家"+gmm[i].name+"最大的牌为:"+gmm[i].pokers.get(gmm[i].pokers.size()-1).colors+gmm[i].pokers.get(gmm[i].pokers.size()-1).number);

}

/*用冒泡法比较每个玩家最大牌,决出优胜者*/

for(int p=0;p

if(gmm[p].pokers.get(gmm[p].pokers.size()-1).numbernb==gmm[p+1].pokers.get(gmm[p+1].pokers.size()-1).numbernb){

if(gmm[p].pokers.get(gmm[p].pokers.size()-1).colornb>gmm[p+1].pokers.get(gmm[p+1].pokers.size()-1).colornb){

gmm[p+1].pokers.get(gmm[p+1].pokers.size()-1).colornb=gmm[p].pokers.get(gmm[p].pokers.size()-1).colornb;

gmm[p+1].name=gmm[p].name;

}

}

else if(gmm[p].pokers.get(gmm[p].pokers.size()-1).numbernb>gmm[p+1].pokers.get(gmm[p+1].pokers.size()-1).numbernb){

gmm[p+1].pokers.get(gmm[p+1].pokers.size()-1).numbernb=gmm[p].pokers.get(gmm[p].pokers.size()-1).numbernb;

gmm[p+1].pokers.get(gmm[p+1].pokers.size()-1).colornb=gmm[p].pokers.get(gmm[p].pokers.size()-1).colornb;

gmm[p+1].name=gmm[p].name;

}

else

continue;

}

System.out.println("The Winner is:"+gmm[user.size()-1].name);

}

}

main方法。

public static void main(String[] args) {

// TODO Auto-generated method stub

User us=new User();

while(true){

try{

us.numberOfUser();

}catch(Exception e){

continue;

}

break;

}

while(true){

try{

us.bulidgammer();

}catch(Exception e){

continue;

}

break;

}

us.shuffle();

us.FP();

}

java基础实战练习_JAVA入门第三季第七章实战练习相关推荐

  1. java怎么实现打牌_JAVA入门第三季实战:简易扑克牌

    本程序使用了ArrayList .HashMap,简单应用了Java第三季的集合框架 首先创建一个卡牌类 /** * 扑克类 */ public class Poker { public Poker( ...

  2. java基础教程案例_Java入门的五个经典案例

    这篇文章主要为大家详细介绍了5个JAVA入门必看的经典实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 入门必看的5个JAVA经典实例,供大家参考,具体内容如下 1.一个饲养员给动物喂食物的例子 ...

  3. Java基础题2从入门到放弃的第五天

    Java基础题2从入门到放弃的第5天 小博主也是初学者,肯定有地方可以用更简单的方法,希望可以指点出来.谢谢! 1分支语句 1. 让用户输入一个100以内的整数x,再输入一个100到200之间的整数y ...

  4. 牛客:【2021秋季算法入门班第七章习题:动态规划1】部分题解:方块与收纳盒、舔狗舔到最后一无所有、可爱の星空、[NOIP1999]拦截导弹

    题单链接:牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)  P1001 方块与收纳盒 传送门:1001-方块与收纳盒_2021秋季 ...

  5. 明解C语言 入门篇 第七章练习题

    明解C语言 入门篇 第七章练习题 7-1 7-2 7-3 7-4 7-5 7-6 7-7(问题已解决) 7-8 7-9 7-10(此处借鉴了@野猪力量的代码) 7-11 7-1 #include &l ...

  6. 阿克斯java表_java 入门第三季的6-5 作业, 希望大家指点

    java 入门第三季的6-5 作业, 希望大家指点 public static void main(String[] args) { // TODO Auto-generated method stu ...

  7. java -jar 默认参数_JAVA入门学习指南,建议收藏

    如果你不懂Java 并且想认真学习接触了解一下Java的语法,建议把这篇文章收藏了,多看几遍,应该可以初步掌握Java 大部分基础的语法 . 让我们出发吧!ps:本文有点长,耐心阅读 . 〇,编程环境 ...

  8. java基础之 反射_Java基础之反射原理与用法详解

    本文实例讲述了Java基础之反射原理与用法.分享给大家供大家参考,具体如下: 1.什么是反射? 反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx& ...

  9. Java 基础巩固:内部类的字节码学习和实战使用场景

    文章出自:安卓进阶学习指南 主要贡献者: Cloud9527 Alex_赵 Struggle shixinzhang 读完本文你将了解: 背景介绍 四种内部类介绍 成员内部类 静态内部类 局部内部类 ...

最新文章

  1. Cocos2d-x移植WP8时间CCScrollView问题
  2. windows核心编程 如何等待超过64(MAXIMUM_WAIT_OBJECTS) kernal object
  3. VIM入门必读(转)
  4. 详解java方法与递归
  5. codeforces 7.22 F Pairwise Modulo
  6. SWF反编译神器ASV2013功能展示(下)
  7. 学生a3制图标题栏尺寸手绘_机械制图基本知识讲解,机械视图的投影画法
  8. 22解析函数的级数表示(一)
  9. delphi读取xml中的内容property name传递参数_python3 Json和XML数据解析
  10. 常见几种java排序算法
  11. 适用于vue的移动端table插件_vue-mobile
  12. 基于php的校园垃圾分类网站的设计与实现
  13. 电脑键盘上的快捷建大全
  14. 蓝桥杯真题——第39级台阶
  15. 图像金字塔:概念及实现
  16. MFC 获取硬盘序列号、IP地址、MAC地址
  17. 大数据学习心得与总结
  18. java多线程电梯调度_面向对象之多线程(可捎带电梯调度)
  19. 合成迪丽热巴下海_F4同台是虚拟合成,只有吴建豪到了现场,F4其他三子呢?...
  20. 流星雨html5,HTML5/Canvas 流星雨+爱心绽放

热门文章

  1. leetcode717.1比特与2比特字符(帮你读题)
  2. 工作2年想从实施转开发还来的急吗?
  3. 数字资产管理平台行业研究报告 | TokenInsight
  4. 大规模集群全网数据备份解决方案
  5. ognl表达式的简单用法
  6. 狂神说 SpringBoot笔记
  7. Win10+OpenCV无法正常读取USB摄像头数据解决方案
  8. 使用ArcGIS为tif影像生成tfw文件
  9. 安装Docker、Harbor、Jenkins、Gitlab
  10. 微信支付网络监控工具部署指引