IT兄弟连 Java语法教程 综合案例
1.案例需求
编写程序,模拟斗地主游戏洗牌和发牌的流程。
2.应用知识
● 数组的声明
● 数组的遍历
● for循环
● if-else分支结构
3.需求解析
模拟斗地主游戏洗牌和发牌,需要在程序中定义一个String类型的数组用来存储扑克牌,数组的大小为54,初始化这个数组,将不同花色不同点数以及大小王以字符串的形式存储到这个数组中共54张牌。开始洗牌,定义一个新的数组,数组长度也是54,用来存储洗后的扑克牌,使用随机数在未洗牌的扑克数组中进行抽取,被随机到的扑克牌进入新数组中,然后在原数组中将该牌标记未已经被洗出去了,如果再次随机到该牌,则重新随机获取下一张牌,最后新数组中存储了洗好的扑克牌。牌洗好后,需要为三位玩家每人发17张牌,然后留下3张做为底牌,三位玩家的手牌使用三个数组表示,每个数组长度为17,底牌使用一个长度为3的数组表示。通过for循环依次为三位玩家发牌,当发到第51张牌时停止发牌,剩下的三张扑克牌存入底牌数组中。
4.需求实现
import java.util.Random;
public class PokerGame {
public static void main(String[] args){
//创建数组,用于存储扑克牌,扑克牌共54张,所以设定数组大小为54
String[] pokers = new String[54];
//定义花色数组,共4中花色。
String[] colors = {"红桃","黑桃","梅花","方片"};
//定义牌面数组
String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q", "K"};
//定义大小王
String[] kings = {"大王","小王"};
//使用循环将牌存储到pokers数组中
int index = 0; //index用来表示扑克牌数组的下标
for(int i = 0;i<numbers.length;i++){
for(int j = 0;j<colors.length;j++){
pokers[index++] = colors[j] + numbers[i];
}
}
//将大小王添加进扑克牌数组
pokers[index++] = kings[0];
pokers[index] = kings[1];
System.out.println("现在有一副新扑克");
//输出扑克牌
for (String poker : pokers){
System.out.print(poker+",");
}
//开始洗牌
//定义数组,用来存储被洗出的牌
String[] newPokers = new String[pokers.length];
//定义数组,用以表示被随机取出的牌
boolean[] make = new boolean[pokers.length];
//洗牌
for (int i = 0;i<pokers.length;i++){
//创建随机数对象
Random rd = new Random();
//获取随机数,当作即将被洗出的牌的下标
int pokerIndex = rd.nextInt(pokers.length);
//判断被洗出的牌是否已经被洗出了
if (!make[pokerIndex]) {
//如果该牌没被洗出则将该牌添加进洗出数组
newPokers[i] = pokers[pokerIndex];
//将该牌设置为已经被洗出了
make[pokerIndex] = true;
} else i--;//如果该牌已经被洗出了,控制扑克数组下标减1重新选牌
}
//控制换行输出
System.out.println();
//输出洗牌后的牌
for (String poker : newPokers){
System.out.print(poker+",");
}
//定义3名玩家手牌数组以及底牌数组
String[] one = new String[17];
String[] two = new String[17];
String[] three = new String[17];
String[] underPoker = new String[3];
//定义下标在发牌时表示不同玩家需要发的第几张牌
int oneIndex = 0;
int twoIndex = 0;
int threeIndex = 0;
int underPokerIndex = 0;
//循环进行按顺序发牌
for(int i = 0; i<newPokers.length ;i++){
//因为每位玩家只需要发17张手牌,最后3张留给底牌,
//所以发到51张时就不应该给继续给玩家发牌了
if(i<=50 && i % 3 == 0){
one[oneIndex++] = newPokers[i];
}else if(i<=50 && i % 3 ==1){
two[twoIndex++] = newPokers[i];
}else if (i<=50 && i % 3 == 2){
three[threeIndex++] = newPokers[i];
}else{
underPoker[underPokerIndex++] = newPokers[i];
}
}
//循环输出每名玩家的手牌以及底牌
System.out.println();
System.out.print("玩家1得到的牌:");
for (String poker: one){
System.out.print(poker + ",");
}
System.out.println();
System.out.print("玩家2得到的牌:");
for (String poker: two){
System.out.print(poker + ",");
}
System.out.println();
System.out.print("玩家3得到的牌:");
for (String poker: three){
System.out.print(poker + ",");
}
System.out.println();
System.out.print("底牌:");
for (String poker: underPoker){
System.out.print(poker + ",");
}
}
}
IT兄弟连 Java语法教程 综合案例的更多相关文章
- IT兄弟连 Java语法教程 标识符和关键字
Java语言也和其它编程语言一样,使用标识符作为变量.对象的名字.也提供了一系列的关键字用以实现特别的功能.本小节将详细介绍Java语言的标识符和关键字等内容. 1.分隔符 Java语言里的分号“;” ...
- IT兄弟连 Java语法教程 数组 经典案例
案例需求: 编程实现双色球中奖号码的生成 1)应用知识: ● 数组的声明 ● 数组的使用 ● for循环 2)需求解析: 在该程序中,需要定义一个长度为7的数组,用来存储中奖号码,使用Rando ...
- IT兄弟连 Java语法教程 流程控制语句 经典案例
使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循 ...
- IT兄弟连 Java语法教程 数组 多维数组 二维数组的声明
Java语言里提供了支持多维数组的语法.但是这里还想说,从数组底层的运行机制上来看是没有多维数组的. Java语言里的数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存,数组元 ...
- IT兄弟连 Java语法教程 变量2
变量的作用域和生命周期 到目前为止,使用的所有变量都是在main()方法开始时声明的,然而,Java允许在任何代码块(代码块以开花括号开始,以闭花括号结束)中声明变量,代码块定义了作用域.因此,每当开 ...
- IT兄弟连 Java语法教程 变量1
什么是变量 在Java程序中,变量是基本的存储单元.是在程序运行中值可以改变的一块内存区域.变量是通过标识符(变量名).变量类型及可选的初始化器来定义的,此外,所有的变量都有作用域,作用域定义了变量的 ...
- IT兄弟连 Java语法教程 Java语言的其他特性
Java语言中除了非常重要的跨平台特性外,还有如下几个关键特性: ● 语法简单易学 Java语言的语法简单明了,容易掌握,而且是纯面向对象(OOP)的语言,Java语言的简单性主要体现在以下几个方面 ...
- IT兄弟连 Java语法教程 Java的发展历程
只有少数几种编程语言对程序设计带来过根本性的影响.其中,Java的影响由于迅速和广泛而格外突出.可以毫不夸张的说,1995年Sun公司发布的Java1.0给计算机程序设计领域带来了一场变革.这场变革迅 ...
- IT兄弟连 Java Web教程 经典案例2
案例需求:写一个用户登录的html页面有账号和密码,并在登录的Servlet中获取登录的账号和密码,如果账号是abc密码是123则向浏览器输出登录成功,否则向浏览器输出登录失败. 案例实现: ● h ...
随机推荐
- [转载]MGR变量group_replication_primary_member
组复制的状态变量只有一个,目前在8.0.17这个版本上还是存在的,未来会被废弃掉,我们在单主的模式下,可以用来查看哪个节点是读写节点. mysql: [Warning] Using a passwor ...
- 关于eclipse的maven项目Java Build Path中maven依赖报错问题
场景描述: respository仓库位置变动过,代码注解等报错 解决方法: 选中项目,点击maven ->update Project即可.
- 20.never give up
- 集合系列 List(四):LinkedList
LinkedList 是链表的经典实现,其底层采用链表节点的方式实现. public class LinkedList<E> extends AbstractSequentialList& ...
- Redis分布式缓存实现
基于redis分布式缓存实现 第一:Redis是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data S ...
- DEBUG 命令用法
(2)DEBUG 命令用法 进入 DEBUG ,用 D 命令查看数据段中 0100H——0200H 单元的内容 用 U 命令查看代码段中 0100H 开始的程序 用 R 命令查看并修改 IP 寄存器的 ...
- 通过jgit一次性升级fastjson版本
背景:笔者所在公司经历了三次fastjson的升级,由于集群,工程数量众多,每次升级都很麻烦.因此开发了一个java的升级工具. 功能介绍: 功能介绍:一个jar文件,通过java -jar命令,输入 ...
- idea搜索不到任何插件
今天在idea安装插件的时候,突然发现,什么都搜索不到了?? 解决方案: 完活.
- SAP会计年度变式
会计年度变式用来确定SAP系统中每个公司的会计记账期间的变式.顾名思议,每个公司的会计年度变式必须与其实际使用的会计年度匹配. 在SAP系统中,每个会计年度最多允许有16个记账期间,其中 ...
- Day6 - Python基础6 模块shelve、xml、re、subprocess、pymysql
本节目录: 1.shelve模块 2.xml模块 3.re模块 4.subprocess模块 5.logging模块 6.pymysql 1.shelve 模块 shelve模块是一个简单的k,v将内 ...