Java基础高级综合练习题扑克牌的创建

 更新时间:2019年01月15日 12:01:18   作者:kuls  
今天小编就为大家分享一篇关于Java基础高级综合练习题扑克牌的创建,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

最近学了很多的知识,脑容量小,记不清,还是得做做练习!

今天就做了一个扑克牌的练习

首先呢..这个逻辑一定要非常清楚,我们要想做出一副扑克牌,必定要弄清楚每一张牌和整的一副牌

首先分析 一张扑克

一张牌里面有什么?相信大家看图(图不是我写的)就应该懂了,一张扑克有属于它自己的花色(红桃,黑桃,梅花,方块) 以及自己的点数(A,2,3…..J,Q,K)就这两种属性,对吧!

那么花色符号,点数符号是个啥? 花色符号就是来代替我们的花色的,我们不可能拿着“红桃”这种文字写进程序吧!所以我们可以用数字来代替

我们就按照下面的,一 一对应

/**
* 王 ♥ ♠ ♣ ♦ 
* 1 2 3 4 5 
* A J Q K 小王 大王 
* 1 11 12 13 14 15 
**/

好了,我们已经把每张特殊一点的扑克给对应好了!我们可以开始写代码了

我的代码文件:

  • APoker.java————–一张扑克
  • Poker.java—————-一副扑克
  • Test.java——————测试

APoker.java先给大家展示

public class APoker {
  //implements Comparable<APoker>
   //花色
   private int color;
   //点数  
   private int count;
   //花色符号
   private String colorText;
   //点数符号
   private String countText;
   //写构造方法
  public APoker(int color, int count, String colorText, String countText) {
    super();
    this.color = color;
    this.count = count;
    this.colorText = colorText;
    this.countText = countText;
  }
  //GET SET 方法,进行封装
  public int getColor() {
    return color;
  }
  public void setColor(int color) {
    this.color = color;
  }
  public int getCount() {
    return count;
  }
  public void setCount(int count) {
    this.count = count;
  }
  public String getColorText() {
    return colorText;
  }
  public void setColorText(String colorText) {
    this.colorText = colorText;
  }
  public String getCountText() {
    return countText;
  }
  public void setCountText(String countText) {
    this.countText = countText;
  }
  //重写 toString 方法,因为我们需要显示每张牌的具体情况
  @Override
  public String toString() {
    return "APoker [color=" + color + ", count=" + count + ", colorText=" + colorText + ", countText=" + countText
        + "]\n";
  }  
}

这里还是非常容易理解的,无非就是进行了封装和重写toString方法。

OK,一张扑克写完了,我们接下来写一副扑克牌

一副扑克牌

我再把那个图拿下来

我们发现一副扑克牌里面有花色数量,扑克牌的数量,以及所有牌(所有牌也就是一个集合)。另外这里面还有着几个方法,这里我就写创建扑克(),洗牌()抽取一张() 吧。

现在看下

Poker.java:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Poker {
  //花色数量
 private int colorcount;
  //牌的数量
 private int pokercount;
 //牌的集合
 private List<APoker> mList;
 //进行封装
public int getColorcount() {
  return colorcount;
}
public void setColorcount(int colorcount) {
  this.colorcount = colorcount;
}
public int getPokercount() {
  return pokercount;
}
public void setPokercount(int pokercount) {
  this.pokercount = pokercount;
}
public List<APoker> getmList() {
  return mList;
}
public void setmList(List<APoker> mList) {
  this.mList = mList;
}
/**
 * 王 ♥ ♠ ♣ ♦
 * 1 2 3 4 5
 * A J  Q  K  小王  大王
 * 1 11 12 13  14  15
 **/
      //创建一副扑克牌
     public List<APoker> creatPoker() {
      //初始化colorcount pokercount
       colorcount=5;//一副扑克有 王 ♥ ♠ ♣ ♦这五种花色
       pokercount=54;//一副扑克共有54张牌
       mList=new ArrayList<APoker>();
       //  ♥ ♠ ♣ ♦----------先分析这四种,因为这四种里面才含有A-K的值,小王大王后面处理
       for (int i = 2; i <=5; i++) {
         //得到每种花色里面的牌
         for (int j = 1; j <= 13; j++) {
           String colorText=null;
           String countText=null;
          switch (i) {
           case 2:
            colorText="♥";
            break;
           case 3:
             colorText="♠";
              break;
           case 4:
             colorText="♣";
              break;
           case 5:
             colorText="♦";
            break;
          }
          switch (j) {
          case 1:
            countText="A";
            break;
          case 11:
            countText="J";
            break;
          case 12:
            countText="Q";
            break;
          case 13:
            countText="K";
            break;
          default:
            countText=j+""; //除了A,J,Q,K,都直接使用数字,这里是将j转化为字符
            break;
          }
           APoker aPoker1=new APoker(i, j, colorText, countText);
           mList.add(aPoker1); //把♥ ♠ ♣ ♦这四种花色塞进一副扑克里面
        }
      }
       APoker aPoker2=new APoker(1, 14, "王", "小王");//写小王
       APoker aPoker3=new APoker(1, 14, "王", "大王");//写大王
       mList.add(aPoker2);//把小王塞进一副扑克里面去
       mList.add(aPoker3);//把大王塞进一副扑克里面去
      return mList;
    }
      /**
      *洗牌方法
      **/
     public List<APoker> shufflePoker() {
      Collections.shuffle(mList); //这是Collections的一个把集合打乱的方法
      return mList;
    }
     /**
     * 随机抽牌
     **/
     public APoker getRandomPoker() {
       Random random=new Random();//获取一个随机数
       int index=random.nextInt(54);
       return mList.get(index);
    }
}

这里慢慢看也很容易的,我已经全部把每一步解释了,大家根据那个对应关系应该很容易理解。

两个写好了,我们可以进行使用了

Test.java就是我们用来测试我们之前写好的代码!

创建一副扑克

import java.util.List;
public class Test {
    public static void main(String[] args) {
    Poker poker=new Poker();//创建一副扑克对象
    List<APoker> mList=poker.creatPoker(); 调用creatPoker()方法,创建一副扑克
    System.out.println(mList);打印出来!
  }
}

我们来看结果

OK 54张扑克被创建了!

洗牌

我们修改一下Test.java的内容

import java.util.List;
public class Test {
    public static void main(String[] args) {
    Poker poker=new Poker();
    List<APoker> mList=poker.creatPoker();
    List<APoker> mList2=poker.shufflePoker();
    System.out.println(mList2);
  }
}

打印一下

果然,,牌的顺序已经乱了,我们进行了洗牌

随机抽牌

我们继续重写一下Test.java

import java.util.List;
public class Test {
    public static void main(String[] args) {
    Poker poker=new Poker();
    List<APoker> mList=poker.creatPoker();
    APoker ap=poker.getRandomPoker();
   System.out.println(ap); 
  }
}

打印一下

果然它随机抽取了一张,每次打印抽取的牌都是不同的,这里就不展示了!

OK,大家继续学习吧,come on!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • spring cloud gateway转发服务报错的解决

    spring cloud gateway转发服务报错的解决

    这篇文章主要介绍了spring cloud gateway转发服务报错的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • SpringCloud之Config配置中心与Redis分布式锁详解

    SpringCloud之Config配置中心与Redis分布式锁详解

    这篇文章主要给大家介绍了SpringCloud Alibaba中Config配置中心,Redis分布式锁,文中有详细的代码示例供大家参考,需要的朋友可以参考阅读
    2023-05-05
  • Java源码解析CopyOnWriteArrayList的讲解

    Java源码解析CopyOnWriteArrayList的讲解

    今天小编就为大家分享一篇关于Java源码解析CopyOnWriteArrayList的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • java中JVM中如何存取数据和相关信息详解

    java中JVM中如何存取数据和相关信息详解

    这篇文章主要介绍了JVM中如何存取数据和相关信息详解,Java源代码文件(.java后缀)会被Java编译器编译为字节码文件,然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。JVM中怎么存取数据和相关信息呢?,需要的朋友可以参考下
    2019-06-06
  • SpringBoot之spring.factories的使用方式

    SpringBoot之spring.factories的使用方式

    这篇文章主要介绍了SpringBoot之spring.factories的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java 对象在 JVM 中的内存布局超详细解说

    Java 对象在 JVM 中的内存布局超详细解说

    这篇文章主要介绍了Java 对象在 JVM 中的内存布局超详细解说,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • SpringMVC使用JsonView针对统一实体返回不同信息

    SpringMVC使用JsonView针对统一实体返回不同信息

    这篇文章主要为大家介绍了SpringMVC使用JsonView针对统一实体返回不同信息,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • SpringBoot整合Mybatis的知识点汇总

    SpringBoot整合Mybatis的知识点汇总

    在本篇文章里小编给各位整理的是关于SpringBoot整合Mybatis的知识点汇总,有兴趣学习的参考下。
    2020-02-02
  • Java中new关键字和newInstance方法的区别分享

    Java中new关键字和newInstance方法的区别分享

    在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法一个是关键字外,最主要的区别是创建对象的方式不同
    2013-07-07
  • 利用宝塔配置jdk环境的详细图文教程

    利用宝塔配置jdk环境的详细图文教程

    最近在宝塔面板上创建一个网站,为Java应用程序提供运行环境,所以下面这篇文章主要给大家介绍了关于利用宝塔配置jdk环境的详细图文教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10

最新评论