A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
在扑克牌基础上完成。做一个洗牌的功能.将洗牌后的效果展示出来.

*/
import java.util.Random;

class Test1 {
        public static void main(String[] args)
        {
                String[] cs={"黑桃","红桃","方块","梅花"};
                String[] ns={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
                Puker[]  ps=new Puker[cs.length*ns.length];
                int index=0;
                for(int i=0;i<cs.length;i++){
                        for(int j=0;j<ns.length;j++){
                                ps[index]=new Puker();
                                ps[index].setColor(cs[i]);
                                ps[index].setNumber(ns[j]);
                                index++;
                        }
                }
               
                for(int i=0;i<ps.length;i++){
                        if(i%ns.length==0){
                                System.out.println();
                               
                        }
                        ps[i].print();
                       
                }
               
               
                  Puker[]  p=new Puker[cs.length*ns.length];//创建一个新Puker型的数组
                  Random ran=new Random();//随机取出52张牌,放入新的数组中完成洗牌的效果。
                  
                  for(int i=0;i<p.length;i++){
                           p[i]=ps[ran.nextInt(53)];
                 
                   }
                  for(int i=0;i<ps.length;i++){
                                if(i%ns.length==0){
                                        System.out.println();
                                       
                                }
                                p[i].print();
                               
                        }
               
        }
       

}
class Puker{
        private String color;
        private String number;
        Puker(){};
       
        Puker(String color,String number){
                this.color=color;
                this.number=number;
               
        }

        String getColor() {
                return color;
        }

        void setColor(String color) {
                this.color = color;
        }

        String getNumber() {
                return number;
        }

        void setNumber(String number) {
                this.number = number;
        }
        void print(){
                System.out.print(color+number+" ");
        }
}

2 个回复

倒序浏览
本帖最后由 白堇翎 于 2013-3-11 00:06 编辑

直接写一个数组装所有的牌
写另外一个数组装洗过的牌
这样会不会更加简单..


======================
因为小弟才刚刚开始学java 还没有学到随机这里 刚刚研究了下Random的用法 得出了以下算法
  1. import java.util.Random;
  2. class test {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 String[] puker={"黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","黑桃K","红桃A","红桃2","红桃3","红桃4","红桃5","红桃6","红桃7","红桃8","红桃9","红桃10","红桃J","红桃Q","红桃K","方块A","方块2","方块3","方块4","方块5","方块6","方块7","方块8","方块9","方块10","方块J","方块Q","方块K","梅花A","梅花2","梅花3","梅花4","梅花5","梅花6","梅花7","梅花8","梅花9","梅花10","梅花J","梅花Q","梅花K"};
  9.                 //定义一个数组 装下所有的52张牌
  10.                 String[] puker_2=new String[52];

  11.                 //创建一个随机数组
  12.                         Random rand=new Random();
  13.                  for(int a=0;a<puker_2.length;a++){
  14.              puker_2[a]= puker[rand.nextInt(puker.length)];
  15.                          System.out.print(puker_2[a]);
  16.                 }
  17.         }
  18. }
复制代码
但是存在缺陷是会出现重复的牌 目前正在想办法解决..
=======================================================
  1. import java.util.Random;
  2. class test {
  3.         public static void main(String[] args) {
  4.                 String[] puker={"黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","黑桃K","红桃A","红桃2","红桃3","红桃4","红桃5","红桃6","红桃7","红桃8","红桃9","红桃10","红桃J","红桃Q","红桃K","方块A","方块2","方块3","方块4","方块5","方块6","方块7","方块8","方块9","方块10","方块J","方块Q","方块K","梅花A","梅花2","梅花3","梅花4","梅花5","梅花6","梅花7","梅花8","梅花9","梅花10","梅花J","梅花Q","梅花K"};
  5.                 //定义一个数组 装下所有的52张牌
  6.                 int[] Arr = new int[52];//定义一个整数类型的数组 用于获取puker数组的下标 长度与puker数组的长度相等
  7.                         for (int i = 0; i < Arr.length; i++) {
  8.             boolean flag = false;//这里定义一个布尔型变量 用于判断下面是否应该赋值
  9.             do {
  10.                 flag = false;
  11.                 int num = (int) (Math.random() * 52 + 0);//产生一个0~52之间的随机值
  12.                 for (int j = 0; j < i; j++) {//这里使用双层嵌套来确保数字不重复 用是否来判断是否相等 假如相等则不会执行赋值的语句
  13.                     if (num == Arr[j]) {
  14.                         flag = true;
  15.                         break;
  16.                     }
  17.                 }
  18.                 if (!flag) {
  19.                     Arr[i] = num;//把不相等的值赋给Arr 注意此处是赋给角标为i的数字 也就是说从0开始一直到51都不会出现重复的值
  20.                 }
  21.             }
  22.                         while (flag);
  23.            System.out.print(puker[Arr[i]]+","); //打印出该值在数组puker中对应的下标对应的具体值
  24.                 }
  25.         }
  26. }
复制代码
总结
先得出一个由0~51组成的的总长度为52,不重复的数组
再用其具体值打印出对应的puker数组中相对应的下标的具体值..
  1. import java.util.Random;
  2. class test {
  3.         public static void main(String[] args) {
  4.                 String[] puker={"黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","黑桃K","红桃A","红桃2","红桃3","红桃4","红桃5","红桃6","红桃7","红桃8","红桃9","红桃10","红桃J","红桃Q","红桃K","方块A","方块2","方块3","方块4","方块5","方块6","方块7","方块8","方块9","方块10","方块J","方块Q","方块K","梅花A","梅花2","梅花3","梅花4","梅花5","梅花6","梅花7","梅花8","梅花9","梅花10","梅花J","梅花Q","梅花K"};
  5.                 String[] puker_2 = new String[52];
  6.                 //定义一个数组 装下所有的52张牌
  7.                 int[] Arr = new int[52];//定义一个整数类型的数组 用于获取puker数组的下标 长度与puker数组的下标相等
  8.                         for (int i = 0; i < Arr.length; i++) {
  9.             boolean flag = false;//这里定义一个布尔型变量 用于判断下面是否应该赋值
  10.             do{
  11.                 flag = false;
  12.                 int num = (int)(Math.random() * 52 + 0);//产生一个0~52之间的随机值 这里第一次编译竟然提示我损失精度 果断强转
  13.                 for (int j = 0; j < i; j++) {//这里使用双层嵌套来确保数字不重复
  14.                     if (num == Arr[j]) {
  15.                         flag = true;
  16.                         break;//相等就跳出 重新执行
  17.                     }
  18.                 }
  19.                 if (!flag) {
  20.                     Arr[i] = num;//把不相等的值赋给Arr 注意此处是赋给角标为i的数字 也就是说从0开始一直到51都不会出现重复的值
  21.                 }
  22.             }
  23.                         while (flag);
  24.             puker_2[i]=puker[Arr[i]];
  25.                 }
  26.                 for (int x=0;x<(puker_2.length)/3 ;x++ )
  27.                 {
  28.                         System.out.print((puker_2[x])+" "+"\t");       
  29.                         System.out.print((puker_2[x+17])+" "+"\t");
  30.                         System.out.println((puker_2[x+34])+" "+"\t");
  31.                 }
  32.                 System.out.println("======================");
  33.                 System.out.println("开始斗地主");
  34.                
  35.         }
复制代码
睡觉之前把数组分成三份 求高人实现斗地主功能

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
没有,随机排序这样很好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马