Java基础高级综合练习题扑克牌的创建
作者:kuls 发布时间:2023-09-08 06:56:19
最近学了很多的知识,脑容量小,记不清,还是得做做练习!
今天就做了一个扑克牌的练习
首先呢..这个逻辑一定要非常清楚,我们要想做出一副扑克牌,必定要弄清楚每一张牌和整的一副牌
首先分析 一张扑克
一张牌里面有什么?相信大家看图(图不是我写的)就应该懂了,一张扑克有属于它自己的花色(红桃,黑桃,梅花,方块) 以及自己的点数(A,2,3…..J,Q,K)就这两种属性,对吧!
那么花色符号,点数符号是个啥? 花色符号就是来代替我们的花色的,我们不可能拿着“红桃”这种文字写进程序吧!所以我们可以用数字来代替
我们就按照下面的,一 一对应
/**
* 王 ♥ ♠ ♣ ♦
* 1 2 3 4 5
* A J Q K 小王 大王
* 1 11 12 13 14 15
**/
好了,我们已经把每张特殊一点的扑克给对应好了!我们可以开始写代码了
我的代码文件:
APoker.java————–一张扑克
Poker.java—————-一副扑克
Test.java——————测试
APoker.java先给大家展示
public class APoker {
//implements Comparable<APoker>
//花色
private int color;
//点数
private int count;
//花色符号
private String colorText;
//点数符号
private String countText;
//写构造方法
public APoker(int color, int count, String colorText, String countText) {
super();
this.color = color;
this.count = count;
this.colorText = colorText;
this.countText = countText;
}
//GET SET 方法,进行封装
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getColorText() {
return colorText;
}
public void setColorText(String colorText) {
this.colorText = colorText;
}
public String getCountText() {
return countText;
}
public void setCountText(String countText) {
this.countText = countText;
}
//重写 toString 方法,因为我们需要显示每张牌的具体情况
@Override
public String toString() {
return "APoker [color=" + color + ", count=" + count + ", colorText=" + colorText + ", countText=" + countText
+ "]\n";
}
}
这里还是非常容易理解的,无非就是进行了封装和重写toString方法。
OK,一张扑克写完了,我们接下来写一副扑克牌
一副扑克牌
我再把那个图拿下来
我们发现一副扑克牌里面有花色数量,扑克牌的数量,以及所有牌(所有牌也就是一个集合)。另外这里面还有着几个方法,这里我就写创建扑克(),洗牌()抽取一张() 吧。
现在看下
Poker.java:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Poker {
//花色数量
private int colorcount;
//牌的数量
private int pokercount;
//牌的集合
private List<APoker> mList;
//进行封装
public int getColorcount() {
return colorcount;
}
public void setColorcount(int colorcount) {
this.colorcount = colorcount;
}
public int getPokercount() {
return pokercount;
}
public void setPokercount(int pokercount) {
this.pokercount = pokercount;
}
public List<APoker> getmList() {
return mList;
}
public void setmList(List<APoker> mList) {
this.mList = mList;
}
/**
* 王 ♥ ♠ ♣ ♦
* 1 2 3 4 5
* A J Q K 小王 大王
* 1 11 12 13 14 15
**/
//创建一副扑克牌
public List<APoker> creatPoker() {
//初始化colorcount pokercount
colorcount=5;//一副扑克有 王 ♥ ♠ ♣ ♦这五种花色
pokercount=54;//一副扑克共有54张牌
mList=new ArrayList<APoker>();
// ♥ ♠ ♣ ♦----------先分析这四种,因为这四种里面才含有A-K的值,小王大王后面处理
for (int i = 2; i <=5; i++) {
//得到每种花色里面的牌
for (int j = 1; j <= 13; j++) {
String colorText=null;
String countText=null;
switch (i) {
case 2:
colorText="♥";
break;
case 3:
colorText="♠";
break;
case 4:
colorText="♣";
break;
case 5:
colorText="♦";
break;
}
switch (j) {
case 1:
countText="A";
break;
case 11:
countText="J";
break;
case 12:
countText="Q";
break;
case 13:
countText="K";
break;
default:
countText=j+""; //除了A,J,Q,K,都直接使用数字,这里是将j转化为字符
break;
}
APoker aPoker1=new APoker(i, j, colorText, countText);
mList.add(aPoker1); //把♥ ♠ ♣ ♦这四种花色塞进一副扑克里面
}
}
APoker aPoker2=new APoker(1, 14, "王", "小王");//写小王
APoker aPoker3=new APoker(1, 14, "王", "大王");//写大王
mList.add(aPoker2);//把小王塞进一副扑克里面去
mList.add(aPoker3);//把大王塞进一副扑克里面去
return mList;
}
/**
*洗牌方法
**/
public List<APoker> shufflePoker() {
Collections.shuffle(mList); //这是Collections的一个把集合打乱的方法
return mList;
}
/**
* 随机抽牌
**/
public APoker getRandomPoker() {
Random random=new Random();//获取一个随机数
int index=random.nextInt(54);
return mList.get(index);
}
}
这里慢慢看也很容易的,我已经全部把每一步解释了,大家根据那个对应关系应该很容易理解。
两个写好了,我们可以进行使用了
Test.java就是我们用来测试我们之前写好的代码!
创建一副扑克
import java.util.List;
public class Test {
public static void main(String[] args) {
Poker poker=new Poker();//创建一副扑克对象
List<APoker> mList=poker.creatPoker(); 调用creatPoker()方法,创建一副扑克
System.out.println(mList);打印出来!
}
}
我们来看结果
OK 54张扑克被创建了!
洗牌
我们修改一下Test.java的内容
import java.util.List;
public class Test {
public static void main(String[] args) {
Poker poker=new Poker();
List<APoker> mList=poker.creatPoker();
List<APoker> mList2=poker.shufflePoker();
System.out.println(mList2);
}
}
打印一下
果然,,牌的顺序已经乱了,我们进行了洗牌
随机抽牌
我们继续重写一下Test.java
import java.util.List;
public class Test {
public static void main(String[] args) {
Poker poker=new Poker();
List<APoker> mList=poker.creatPoker();
APoker ap=poker.getRandomPoker();
System.out.println(ap);
}
}
打印一下
果然它随机抽取了一张,每次打印抽取的牌都是不同的,这里就不展示了!
OK,大家继续学习吧,come on!
来源:https://blog.csdn.net/qq_36547531/article/details/81582632


猜你喜欢
- 使用applicationContext.xml配置文件SpringBoot默认是通过Java代码进行依赖注入,但也为xml形式的依赖注入提
- 引言上一节讲面试中被问到分布式系统概念相关的,讲完了分布式系统的概念,优点缺点和 RPC 后,我以为这个问题就到此结束了,没想到成功给自己挖
- 一、简述首先,Java 8引入了java.time.LocalDate来表示一个没有时间的日期。其次,使用Java 8版本,还需要更新jav
- 1.线索化二叉树的介绍将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树.问题分析:1.当我们对上面的二叉树进行中序遍历时
- 这篇文章主要介绍了SpringBoot加载外部依赖过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 本文实例为大家分享了Java Socket聊天室功能的具体代码,供大家参考,具体内容如下Client.javaimport java.io.
- 1,通过Handler机制主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如
- 最近公司项目中有一个类似滴滴出行填写验证码的弹框,下面是我撸出来的效果: 中间的那个输入密码的6个框框其实就是用shape画的背景
- 由于Android课程项目需要,特地查阅了okHttp的使用,发现网上找的大多和自己的需求不一样。所以就着团队项目需要,自己简单封装了一个o
- 这篇文章主要介绍了Java流程控制顺序结构原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 最近做了关于在Android设备上外接扫码的项目,在此记录一下关于Android USB扫码枪获取内容的问题首先我这边使用是USB HID的
- 1、SerialPortHelper「Android串口通信」介绍原项目地址https://github.com/freyskill/Ser
- ////////////////////////////
- 相同点:1. ref 和 out 都是按地址传递的,使用后都将改变原来参数的数值;2. 方法定义和调用方法都必须显式使用 ref 或者 ou
- 当我们在登录像QQ邮箱这种大多数的网站,往往在登录按键上会有下次自动登录这个选项,勾选后登录成功,在一段时间内,即便退出浏览器或者服务器重启
- 在Springboot中默认的静态资源路径有:classpath:/METAINF/resources/,classpath:/resour
- 一、关系型数据库SQLIte 每个应用程序都要使用数据,
- 今天可是遇到一个很简单的需求,但是却让我蛋疼了半天。滑动屏幕控制物体旋转,但是旋转的角度要在-60到60之间。乍一听这简直是小儿科啊。判断一
- 常见的EditText长按菜单如下oppo小米需求是隐藏掉其中的分享/搜索功能,禁止将内容分享到其他应用。最终解决方案这里先说下最终解决方案
- 前言相信大家在java中用到的最多的时间类莫过于 java.util.Date了,由于Date类中将getYear() , getMonth