Java练习——扑克牌发牌器
声明:学习自其他博主,感谢分享,这里自己也写了一下。
实现思路

  • - 构建一张扑克牌
  • - 构建一套扑克牌
  • - 测试

 构建一张扑克牌

/**
* @author 冬冬
* 定义一个单张扑克牌类
* 有花型,大小
*/
public class Card { private String flower; // 花型
private int daxiao; // 点数 /**构造方法
* @param flower
* @param daxiao
*/
public Card(String flower, int daxiao) {
this.flower = flower;
this.daxiao = daxiao;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
* 获取本张卡牌的花型与大小,对于特殊的大小,如1——A,输出时进行转换
*/
public String toString() {
String daxiaoStr = "";
switch(daxiao) {
case 1: daxiaoStr = "A"; break;
case 11: daxiaoStr = "J"; break;
case 12: daxiaoStr = "Q"; break;
case 13: daxiaoStr = "K"; break;
default: daxiaoStr = String.valueOf(daxiao);
}
return flower + daxiaoStr;
}
}

构建一套扑克牌

public class Poker {

private static String[] flowers = {"黑桃", "红桃", "草花", "方块"};
private static int[] daxiaos = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
private Card[] cards;//卡片数组,应该有54张,这里去掉大小王,只52张 /**
* 构造器
* 按顺序实例化52张扑克牌
*/
public Poker() {
cards = new Card[52];
for(int i = 0; i < flowers.length; i++) {
for(int j = 0; j < daxiaos.length; j++) {
cards[i * 13 + j] = new Card(flowers[i], daxiaos[j]);
}
}
} /**
* 洗牌 (随机乱序)
* 对于52个Card实例数组随机乱序排列
*/
public void shuffle() {
for(int i = 0, len = cards.length; i < len; i++) {
int index = (int) (Math.random() * len);
Card temp = cards[index];
cards[index] = cards[i];
cards[i] = temp;
}
} /**
* 发牌
* @param index 发牌的位置
*
*/
public Card deal(int index) {
return cards[index];
} }

 测试

public class Test {

public static void main(String[] args) {
Poker poker = new Poker();//生成扑克牌
poker.shuffle(); // 洗牌(乱序)
Card c1 = poker.deal(0); // 发第一张牌
//创建四个玩家,每个玩家13张空牌
Card [] person1=new Card[13];
Card [] person2=new Card[13];
Card [] person3=new Card[13];
Card [] person4=new Card[13];
//为玩家的的空牌赋值
for(int i=1;i<=52;i++)
{
if(i<=13) person1[i-1]=poker.deal(i-1);
if(i>13&&i<=26) person2[i-1-13]=poker.deal(i-1);
if(i>26&&i<=39) person3[i-1-26]=poker.deal(i-1);
if(i>39&&i<=52) person4[i-1-39]=poker.deal(i-1);
}
//打印
System.out.println("玩家1");
for (Card card : person1) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家2");
for (Card card : person2) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家3");
for (Card card : person3) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家4");
for (Card card : person4) {
System.out.print(card+" ");
}
}
}

结果:

玩家1
红桃6 方块4 方块A 黑桃4 草花2 红桃Q 红桃J 红桃K 方块3 黑桃K 方块8 黑桃7 黑桃5
玩家2
草花A 黑桃2 红桃7 草花3 草花5 方块J 方块9 草花9 草花K 黑桃8 草花J 黑桃10 红桃8
玩家3
方块7 红桃4 红桃2 草花6 方块2 黑桃Q 黑桃9 黑桃A 草花10 草花7 红桃10 红桃A 方块Q
玩家4
红桃9 方块5 草花8 方块10 方块K 草花Q 黑桃3 红桃5 黑桃6 黑桃J 红桃3 方块6 草花4

注意事项

1. 不要忘记在Poker类里导入Card类,在Test类里面导入Poker和Card;
2. 自己想想,动手做一做才能真正理解。

Java练习——扑克牌发牌器的更多相关文章

  1. Java集合,扑克牌的小项目练习

    Java集合,扑克牌的小项目练习 2小时学完了类与集合,一直二倍加跳过,集合和类的学习我觉得得多实践中去记住,光靠背,永远也背不完,学的时候记一下常用的,特殊的就行了,用的时候再查,多写代码才能会,哈 ...

  2. 11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  3. C算法编程题(一)扑克牌发牌

    前言 上周写<我的编程开始(C)>这篇文章的时候,说过有时间的话会写些算法编程的题目,可能是这两天周末过的太舒适了,忘记写了.下班了,还没回去,闲来无事就写下吧. 因为写C++的编程题和其 ...

  4. 黑马程序员——【Java高新技术】——类加载器

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 (一)类加载器(class loader) 用来动态加载Java类的工具,它本身也是Java类. ...

  5. Java中的类加载器

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16102131 从java的动态性到类加载机制   我们知道,Java是一种动态语言.那么怎 ...

  6. Java中的类加载器以及Tomcat的类加载机制

    在加载阶段,虚拟机需要完成以下三件事情: 1.通过一个类的全限定名来获取其定义的二进制字节流. 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 3.在Java堆中生成一个代表这个类 ...

  7. java swing 音乐播放器-乐乐音乐

    乐乐音乐1.0(本地版) 乐乐音乐是基于musique 开源播放器开发的java swing音乐播放器,实现了mp3.flac.ape.wav等多种音频格式的播放和ksc歌词的解析.制作和显示. 完成 ...

  8. [原]用C#模拟实现扑克牌发牌、排序程序…

    (1)52张扑克牌,四种花色(红桃.黑桃.方块和梅花),随机发牌给四个人. (2)最后将四个人的扑克牌包括花色打印在控制台上. 其中:     花色和点数用枚举类型实现     每张扑克牌用结构实 ...

  9. [原]用C#模拟实现扑克牌发牌、排序程序。

    (1)52张扑克牌,四种花色(红桃.黑桃.方块和梅花),随机发牌给四个人. (2)最后将四个人的扑克牌包括花色打印在控制台上. 其中:     花色和点数用枚举类型实现     每张扑克牌用结构实 ...

随机推荐

  1. mysql 存储过程 函数 触发器

    mysql存储过程与函数 存储过程下载  demo mysql> delimiter // -- 这里//为修改默认分隔符: mysql> CREATE PROCEDURE simplep ...

  2. HTTP是什么,不是什么?

    HTTP是什么? 不是什么? HTTP: 超文本传输协议,也就是HyperText Transfer Protocol.这是从字面上的理解,如果深一步的理解呢? HTTP又是什么呢? HTTP是什么 ...

  3. intellij idea 新建springboot工程pom.xml报错

    今天使用idea新建的springboot工程pom.xml文件报错如下 1. 问题 'settings.xml' has syntax errors less... (Ctrl+F1) Inspec ...

  4. pg 数据库操作

    一.pg数据库修改操作 Insert into table (key) values (value) on conflict(主键) do update set key=value; 修改的 valu ...

  5. 移动端好用的下拉加载上拉刷新插件 dropload插件

    入了很多下拉加载上拉刷新的插件,但是感觉都不好用,知道最近遇到这款dropload的插件,瞬间打开新世界的大门啊,无卡顿简单易用可配置 <!doctype html> <html&g ...

  6. 关于python中lambda 函数使用小结

    例子: 如果定义普通函数,一般都是这样写: def:ds(x): return 2*x+1 调用即: ds(5) 如果用lambda函数就是这么写,就是一句话: g =lambda x:2*x+1 调 ...

  7. 有关OutputDebugString的一点儿事实

    我最近花了一些时间分析OutputDebugString方法.在我的另一个实验中,我需要一个仅依赖于本机API的OutputDebugString版本.在实现它的过程中,我发现了一些关于OutputD ...

  8. restql 学习二 几种查询模式

    restql 提供了比较强大的查询处理. 支持的几种查询模式 基本查询,主要是单一映射资源的查询,(from,with,only,header,cache...) 并行查询,多个资源的同时查询,(对于 ...

  9. [RN] React Native 好用的时间线 组件

    React Native 好用的时间线 组件 效果如下: 实现方法: 一.组件封装 CustomTimeLine.js "use strict"; import React, {C ...

  10. localStorage二次封装-----设置过期时间

    export default{ set(key,data,time){ let obj={ data=data, ctime:(new Date()).getTime(),//时间戳,同Date.no ...