/*
功能:实现扑克牌的显示以及洗牌的功能
作者:闫继闯
*/
import java.util.*;
/*
成员方法
public static poke[] crePoke();定义一个方法,用来创建扑克牌
public static void pokeShow(poke[] pArr);显示所有的扑克牌
public static poke[] randomPokeShow();对数组打乱顺序,洗牌
*/
class Demo2{
//入口函数
public static void main(String[] args) {
System.out.println("洗牌前");
pokeShow(crePoke());
System.out.println("洗牌后");
pokeShow(randomPokeShow());
}
//定义一个方法,用来创建扑克牌
public static poke[] crePoke() {
//定义一个存储字符串类型的数组 cArr(colorArray),用来储存扑克牌的四种花色
String[] cArr = {"红桃","方块","黑桃","梅花"};
//定义一个存储字符串类型的数组 nArr(numberArray),用来存储扑克牌的13种上边的值
String[] nArr = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
/*定义一个存储poke类型的数组,相当于扑克盒,此数组的长度为cArr.length * nArr.length
cArr.length是一个数组的方法,计算数组的长度,扑克本身处大小王一个52张,也就是cArr的长度
乘以nArr数组的长度,但是由于数组没有初始化,返回值为null
*/
poke[] pArr = new poke[cArr.length * nArr.length];
//定义存储扑克牌的下标
int index = 0;
//外循环,四种花色的控制
for (int x = 0;x < cArr.length ;x++ ) {
//内循环,13种值
for (int y = 0;y < nArr.length;y++ ) {
//创建扑克牌,并利用构造函数对其进行初始化,用扑克盒pArr[index],通过index++,
//将每张扑克牌存入数组中(扑克盒)
pArr[index] = new poke(cArr[x],nArr[y]);
//一次下标++,把数据存入数组中
index++;
}
}
return pArr;
}
//显示所有的扑克牌
public static void pokeShow(poke[] pArr) {
//通过遍历将所有的扑克牌进行显示
for (int x = 0;x <pArr.length ;x++ ) {
//控制,当输出一张花色,进行换行
if (x % 13 == 0) {
//换行
System.out.println();
}
//调用show()方法进行显示
pArr[x].show();
}
//换行
System.out.println("----------------------------------------------------------------------");
}
//对数组打乱顺序,洗牌
public static poke[] randomPokeShow() {
//调用方法创建扑克牌,返回poke类型的数组
poke[] pArr = crePoke();
//System.out.print(pArr.length);做个小实验返回52
//创建随机对象
Random random = new Random();
//遍历所有数组
for (int x = 0;x < pArr.length;x++ ) {
//任意查找随机值,存入int型p中
int p = random.nextInt(pArr.length);
//对数组内的值进行调换,以达到乱序洗牌
poke tmp = pArr[x];
pArr[x] = pArr[p];
pArr[p] = tmp;
}
//返回数组
return pArr;
}
}
/*
定义一个类
成员属性有:
String color;
String number;
成员方法有:
public void setColor(String color);
public void setNumber(String number);
public String getColor();
public String getNUmber();
void show();
构造方法有:
public poke();
public poke(String color,String number);
*/
class poke {
//创建一个string类型的字符串,color代表扑克牌的花色(红桃,方块,黑桃,梅花);权限为私有,只能在本类中使用
private String color;
//创建一个string类型的字符串,number代表扑克牌的是扑克牌上的值,权限为私有,只能在本类中使用
private String number;
/*
定义有参量的构造函数,目的是当创建对象时,对color和number进行初始化
*/
public poke(String color,String number) {
this.color = color;
this.number = number;
}
//定义无参数的构造函数
public poke() {
}
/*
创建一个方法,方法名为setColor,返回值为void,参数是string color
作用是,通过此方法对class类中的成员变量string color 进行赋值
this代表当前的poke类,public表示此方法为公共方法
*/
public void setColor(String color) {
this.color = color;
}
/*
创建一个方法,方法名为setNumber,返回值为void,参数是string number
作用是,通过此方法通过此方法对class类中的成员变量string number 进行赋值
this代表当前的poke类,public表示此方法为公共方法
*/
public void setNumber(String number) {
this.number = number;
}
/*
public表示此方法为公共方法,返回值为字符串类型,方法名字为getColor,
作用是,显示成员变量中color.
*/
public String getColor() {
return color;
}
/*
public表示此方法为公共方法,返回值为字符串类型,方法名字为getNumber,
作用是,显示成员变量中color.
*/
public String getNUmber() {
return number;
}
//将扑克牌的花色和值显示出来,返回值为void
void show() {
System.out.print(color+number+" | ");
}
}
|