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语法教程 综合案例的更多相关文章

  1. IT兄弟连 Java语法教程 标识符和关键字

    Java语言也和其它编程语言一样,使用标识符作为变量.对象的名字.也提供了一系列的关键字用以实现特别的功能.本小节将详细介绍Java语言的标识符和关键字等内容. 1.分隔符 Java语言里的分号“;” ...

  2. IT兄弟连 Java语法教程 数组 经典案例

    案例需求: 编程实现双色球中奖号码的生成 1)应用知识: ●  数组的声明 ●  数组的使用 ●  for循环 2)需求解析: 在该程序中,需要定义一个长度为7的数组,用来存储中奖号码,使用Rando ...

  3. IT兄弟连 Java语法教程 流程控制语句 经典案例

    使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循 ...

  4. IT兄弟连 Java语法教程 数组 多维数组 二维数组的声明

    Java语言里提供了支持多维数组的语法.但是这里还想说,从数组底层的运行机制上来看是没有多维数组的. Java语言里的数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存,数组元 ...

  5. IT兄弟连 Java语法教程 变量2

    变量的作用域和生命周期 到目前为止,使用的所有变量都是在main()方法开始时声明的,然而,Java允许在任何代码块(代码块以开花括号开始,以闭花括号结束)中声明变量,代码块定义了作用域.因此,每当开 ...

  6. IT兄弟连 Java语法教程 变量1

    什么是变量 在Java程序中,变量是基本的存储单元.是在程序运行中值可以改变的一块内存区域.变量是通过标识符(变量名).变量类型及可选的初始化器来定义的,此外,所有的变量都有作用域,作用域定义了变量的 ...

  7. IT兄弟连 Java语法教程 Java语言的其他特性

    Java语言中除了非常重要的跨平台特性外,还有如下几个关键特性: ●  语法简单易学 Java语言的语法简单明了,容易掌握,而且是纯面向对象(OOP)的语言,Java语言的简单性主要体现在以下几个方面 ...

  8. IT兄弟连 Java语法教程 Java的发展历程

    只有少数几种编程语言对程序设计带来过根本性的影响.其中,Java的影响由于迅速和广泛而格外突出.可以毫不夸张的说,1995年Sun公司发布的Java1.0给计算机程序设计领域带来了一场变革.这场变革迅 ...

  9. IT兄弟连 Java Web教程 经典案例2

    案例需求:写一个用户登录的html页面有账号和密码,并在登录的Servlet中获取登录的账号和密码,如果账号是abc密码是123则向浏览器输出登录成功,否则向浏览器输出登录失败. 案例实现: ●  h ...

随机推荐

  1. Chrome 开发者工具实用操作

    Chrome 开发者工具实用操作 https://umaar.com/dev-tips/

  2. 运维工程师必会工具(Nmap和TCPdump)

    1.NMap工具 主要功能:探测主机是否在线.扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描. NMap支持很多扫描技术,例如:UDP.TCPconnect().TCPSYN(半开扫描).ft ...

  3. 生产环境Shell脚本Ping监控主机是否存活(多种方法)

    在网上针对shell脚本ping监控主机是否存活的文档很多,但大多都是ping一次就决定了状态,误报率会很高,为了精确判断,ping三次不通再发告警,只要一次ping通则正常.于是,今天中午抽出点时间 ...

  4. JS高程中的垃圾回收机制与常见内存泄露的解决方法

    起因是因为想了解闭包的内存泄露机制,然后想起<js高级程序设计>中有关于垃圾回收机制的解析,之前没有很懂,过一年回头再看就懂了,写篇博客与大家分享一下. #内存的生命周期: 分配你所需要的 ...

  5. R-6 线性回归模型流程

    本节内容: 0:小知识 1:新数据要如何进行分析 2:第二步骤:理解数据 3:第三步骤:相关分析 4:特殊点 0:小知识 0.1:我们说对分析一个数据一般是分步骤的:那么我们可以对其中的步骤进行打标签 ...

  6. 在vue-cli3中使用axios获取本地json

    在vue-cli3中,公共文件夹由static变成了public 先把要访问的json放到public文件夹下 使用axios的get方法获取,不能用post,不然会报404 axios..json` ...

  7. js中触发表单提交

    html代码: <form action="/test/action" method="get" id="myForm"> &l ...

  8. 用二进制写程序,提升装 X 境界

    用二进制来写程序这么反人类的事情,的确是很装的事情,但是它不但是一件很装的事情,也是掌握底层知识的基础能力之一.听我慢慢道来. 程序设计语言有高级语言和低级语言之分,尤其是现在各种编程语言的不断发展, ...

  9. 国产处理器的逆袭机会——RISC-V

    前言 今天天气阴沉,刚才又下起了小雨,温度骤降,前几天脱下的秋裤,今天又穿上了,这天气真是变化无常.上周六(4.20)参加了一场关于RSIC-V的技术沙龙,第一次真正了解了RISC-V架构,正好今天不 ...

  10. Java题库——Chapter12 异常处理和文本IO

    异常处理 1)What is displayed on the console when running the following program? class Test { public stat ...