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 ...
随机推荐
- CodeForces - 460C(二分+差分)
题意 https://vjudge.net/problem/CodeForces-460C 一个长度为 n 的序列 a ,你有 m 次操作的机会,每次操作是将其中连续的 w 个元素增加 1 .最大化最 ...
- [主动学习--查询策略] 01 Core-set
符号定义 主动学习每一次迭代选择的样本数量为一个 budget 训练集中初始无标签数据集记为 unlabeled data,\(\bm{u}^0\) 训练集中初始有标签数据集记为 initial la ...
- 在windows上用apache+mod_wsgi服务部署django项目
之前一直在本地跑django项目,最近尝试在服务器上部署项目,目前已经成功部署,也花了好多时间,这里跟大家交流一下,希望对像我一样的新手有帮助. 一.配置环境: 1.Python版本3.7 2.服务器 ...
- [洛谷P1169][题解][ZJOI2007]午餐
这是题目吗? 显然的DP,讲几个重要的地方 1.贪心:让吃饭时间长的先排队(证明从略) 2.状态: f[i][j][k]代表前i个人,一号时间j,二号时间k显然MLE 所以压缩成f[i][j]代表前i ...
- ElementPath
ElementTree库附带了一个简单的类似XPath的路径语言ElementPath主要区别在于,可以在ElementPath表达式中使用{namespace}标记符号但是,诸如值比较和函数之类的高 ...
- 转载-Archunit的使用
Archunit的使用 注:开发的编辑器: Intellij Idea,JDK版本是JDK8 Archunit是什么,官网的英文介绍很好,建议阅读原文,"ArchUnit is a ...
- java获取月的第一天和最后一天
在Java中获取月的第一天和最后一天主要是通过Calendar对象来实现. /** * 获取月的第一天 * * @param month 月 */ private String getMonthBeg ...
- 移动端触发touchend后阻止click事件
// vue里面简单的处理方式,可以同时兼容PC和移动端 <div @touchend.stop.prevent="doSomething" @click.stop.prev ...
- MyBatis的结构和配置
概述 MyBatis将用户从JDBC的访问中解放出来,用户只需要定义需要操作的SQL语句,无须关注底层的JDBC操作,就可以面向对象的方式进行持久层操作.底层数据库连接的获取.数据访问的实现.事务控制 ...
- javaWeb核心技术第十一篇之Listener
监听器:所谓的监听器是指对整个WEB环境的监听,当被监视的对象发生改变时,立即调用相应的方法进行处理. 监听术语: 事件源:被监听的对象. 监听器对象:监听事件源的对象 注册或绑定:1和2结合的过程 ...