思路:

i:创建牌
一张纸牌包含花色和字符
一副扑克牌:4种花色:黑桃、红桃、梅花、方块
                      17种字符:2~10  J~A
                      大、小王

ii:洗牌
通过随机数获取原数组下标,但是所参产生的随机数会重复,所以用个标识数组

iii:发牌
        玩家1的牌的数组下标是0,3,6,9...
        玩家2的牌的数组下标是1,4,7,10...
        玩家1的牌的数组下标是2,5,8,11...

代码:
 
package test01; import java.util.Arrays; import java.util.Random; import
java.util.Scanner; public class test01 { public static void main(String[] args)
{ //1.模拟软件 while(true) { //3.打印提示信息 System.out.println("【1】创建牌 【2】洗牌 【3】发牌
【-1】退出游戏"); //4.从控制台获取一个整数 int menu=getInt(); //2.模拟关闭按钮 if(menu==-1) { break;
} //5.校验菜单 boolean isCheck=check(menu); if(!isCheck) {
System.out.println("输入的数字非法,请重新输入!"); continue; } //6.处理菜单 process(menu); } }
//从控制台获取一个整数 public static int getInt() { Scanner sc=new Scanner(System.in);
return sc.nextInt(); } //校验菜单 public static boolean check(int menu) {
if(menu>=1&&menu<=3) return true; else return false; } static String[]
pokers=null; //处理菜单 public static void process(int menu) { if(menu==1) { //创建牌
pokers=create(); }else if(menu==2) { //洗牌 pokers=random(pokers); }else { //发牌
fetch(pokers); } } //创建牌 public static String[] create() { //1.准备花色数组 String[]
colors= {"红桃","黑桃","梅花","方块"}; //2.准备字符 String[] numbers=
{"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //3.准备大小王 String[]
kings= {"大王","小王"}; //4.定义目标数组 String[] destPokers=new String[0];//记得扩容
//5.定义组合 for(int i=0;i<colors.length;i++){ for(int j=0;j<numbers.length;j++) {
destPokers=Arrays.copyOf(destPokers,destPokers.length+1);
destPokers[destPokers.length-1]=colors[i]+numbers[j]; } } //拷贝两个王
destPokers=Arrays.copyOf(destPokers,destPokers.length+kings.length);
System.arraycopy(kings, 0, destPokers, destPokers.length-kings.length,
kings.length); return destPokers; } //洗牌 public static String[] random(String[]
srcPokers) { //2.定义一个目标数组 String[] destPokers=new String[srcPokers.length];
//4.标识数组 boolean[] flags=new boolean[srcPokers.length]; //3.随机数要拿54次 for(int
i=0;i<srcPokers.length;i++){ //1.拿到随机数 Random ran=new Random(); int
index=ran.nextInt(); //5.获取当前下标的标识 boolean flag=flags[index];
//6.判断如果标识为true,那么此次随机无效,如果为false ,这张牌就可以保存到目标数组 if(flag) { i--; }else {
destPokers[i]=srcPokers[index]; flags[i]=true; } } return destPokers; } //发牌
public static void fetch(String[] pokers) { //1.定义三个玩家 String[] p1=new
String[17]; String[] p2=new String[17]; String[] p3=new String[17]; //2.遍历数组
for(int i=0;i<pokers.length;i++) { if(i%3==0) { p1=Arrays.copyOf(p1,
p1.length+1);//扩容 p1[p1.length-1]=pokers[i]; }else if(i%3==1) {
p2=Arrays.copyOf(p2, p2.length+1);//扩容 p2[p2.length-1]=pokers[i]; }else
if(i%3==2) { p3=Arrays.copyOf(p3, p1.length+1);//扩容 p3[p3.length-1]=pokers[i];
} } //3.打印玩家们手里的牌 System.out.println("玩家一:\n",+Arrays.toString(p1));
System.out.println("玩家二:\n",+Arrays.toString(p2));
System.out.println("玩家三:\n",+Arrays.toString(p3)); } };

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信