Card类

package com.company;

public class Card {
private String color;
private Integer value;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public String ToString()
{
String strValue = "";
switch(value)
{
case 1:
{
strValue = "A";
break;
}
case 11:
{
strValue = "J";
break;
}
case 12:
{
strValue = "Q";
break;
}
case 13:
{
strValue = "K";
break;
}
default:
strValue = value.toString();
break;
}
return color+strValue;
} }

Poke类

package com.company;

import java.sql.Connection;
import java.util.*; /**
* Created by ttc on 2017/6/30.
*/
public class Poke {
String[] colors = {"红桃","黑桃","方片","草花"};
Integer[] values = {1,2,3,4,5,6,7,8,9,10,11,12,13};
Card[] cards = new Card[52];// public void makeCards()
{
//生成52张扑克,印刷扑克
int index = 0;
for(int i = 0; i < 4; i++) {
for (int j = 0; j < 13; j++) {
cards[index] = new Card();
cards[index].setValue(values[j]);
cards[index].setColor(colors[i]);
index++;
}
}
return;
} public void outputCards()
{
int index2 = 0;
for(Card card : cards)
{
if(index2 % 13 == 0)
System.out.println(); System.out.print(card.toString()+" ");
index2++;
}
}
///5--25
//5+(0--20)
//Random r = new Random();
//int n = 5 + r.nextInt(20);//生成一个0,到n之间的随机数,不包括n,包括0
public void shuffle()
{
Random random = new Random();
for(int n = 0; n < 52; n++)
{
int index = random.nextInt(n+1);//n之前的某张牌
//交换cards[n]<---->cards[index];
Card cardTemp = cards[n];
cards[n] = cards[index];
cards[index] = cardTemp;
}
} //一手牌
public Card[] getOneHands()
{
Card[] cardHands = new Card[5];
// cardHands[0] = cards[0];
// cardHands[1] = cards[13];
// cardHands[2] = cards[26];
// cardHands[3] = cards[39];
// cardHands[4] = cards[1];
for(int i = 0; i < 5; i++)
{
cardHands[i] = cards[i];
}
return cardHands;
} public void judgeHandType(Card[] hands)
{
boolean bIsSameColor = false;
boolean bIsShunzi = false;
//先判断这手牌是不是同花
Set<String> colorSets = new HashSet<String>();
for(int i = 0; i < hands.length; i++)
{
colorSets.add(hands[i].getColor());
}
if(colorSets.size()==1)
{
bIsSameColor=true;
//System.out.println("同花");
} Set<Integer> valueSets = new HashSet<Integer>();
List<Integer> valueLists = new ArrayList<Integer>();
for(int i = 0; i < hands.length; i++)
{
valueSets.add(hands[i].getValue());
valueLists.add(hands[i].getValue());
} Collections.sort(valueLists);//排序
int diff = valueLists.get(4) - valueLists.get(0); if(diff == 4 && valueSets.size() == 5)
{
bIsShunzi = true;
//System.out.println("顺子");
} if(bIsSameColor&&bIsShunzi)
{
System.out.println("同花顺");
}
else if(bIsSameColor)
{
System.out.println("同花");
}
else if(bIsShunzi)
{
System.out.println("顺子");
}
else if(valueSets.size() == 5)//这5张牌不是顺子,并且值都不同
{
System.out.println("杂牌");
}
else if(valueSets.size() == 4)
{
System.out.println("一对");
}
else
{
//map的key保存的是牌的值,map的值保存的是同样值的牌的列表
Map<Integer,List<Card>> map = new HashMap<Integer,List<Card>>();
//将一手牌的数据,从数组结构,转变成map结构 for(int i = 0; i < hands.length; i++)
{
Card card = hands[i];
//看card这张牌的值是否在map的key中存在
if(map.containsKey(card.getValue()))//如果存在
{
List<Card> lst = map.get(card.getValue());
lst.add(card);
}
else//不存在
{
List<Card> lst = new ArrayList<Card>();
lst.add(card);
map.put(card.getValue(),lst);
} } if(map.size() == 2)//4带1,3带2
{
boolean bIsFourWithOne = false;
for(Map.Entry<Integer,List<Card>> entry : map.entrySet())
{
//entry的值是一个List
if(entry.getValue().size() == 4)
{
bIsFourWithOne = true;
break;
}
}
if(bIsFourWithOne == true)
{
System.out.println("四带一");
}
else
{
System.out.println("三带二");
}
}
else if(map.size() == 3)//221,311
{
boolean bIsThreeOneOne = false;
for(Map.Entry<Integer,List<Card>> entry : map.entrySet())
{
//entry的值是一个List
if(entry.getValue().size() == 3)
{
bIsThreeOneOne = true;
break;
}
}
if(bIsThreeOneOne == true)
{
System.out.println("三条");
}
else
{
System.out.println("两对");
}
}
} return;
} }

Main类

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
// write your code here
Poke poke = new Poke();
poke.makeCards();
poke.outputCards();
poke.shuffle();
System.out.println("\n洗牌以后");
poke.outputCards(); Card[] hands = poke.getOneHands();
System.out.println();
for(int i = 0; i< 5; i++)
{
System.out.println(hands[i]);
}
System.out.println("\n牌型是:");
poke.judgeHandType(hands); }
}

扑克模拟,牌型判断java版的更多相关文章

  1. 蓝桥杯省赛 牌型种数java

    小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张.这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺 ...

  2. (转)牛牛牌型判定(五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛>没牛)

    牌型大小: 五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛(牛987654321) > 没牛,K > Q > J ……2 > A, 黑 ...

  3. 【教程】模拟登陆百度之Java代码版

    [背景] 之前已经写了教程,分析模拟登陆百度的逻辑: [教程]手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 然后又去用不同的语言: Python的: [教程]模 ...

  4. java 牌型种数

    牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得 ...

  5. java实现第六届蓝桥杯牌型整数

    牌型整数 题目描述 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不 ...

  6. 常见排序算法题(java版)

    常见排序算法题(java版) //插入排序:   package org.rut.util.algorithm.support;   import org.rut.util.algorithm.Sor ...

  7. 第6届蓝桥杯javaA组第7题,牌型种数,一道简单的题带来的思考

    题目: 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到 ...

  8. 编写你的第一个 Java 版 Raft 分布式 KV 存储

    前言 本文旨在讲述如何使用 Java 语言实现基于 Raft 算法的,分布式的,KV 结构的存储项目.该项目的背景是为了深入理解 Raft 算法,从而深刻理解分布式环境下数据强一致性该如何实现:该项目 ...

  9. 剑指offer(java版)【转】

    面试题 2 :实现单例模式 1. 饿汉式单例类 public class SingletonClass { private static final SingletonClass instance=n ...

随机推荐

  1. java 线程 join(wait) 后,是如何唤醒

    概要:锁是线程,锁对象执行完毕后,会调用自身对象上的notify(); Join 方法:本质上还是根据wait方法实现的.分析join源码发现join方法本身是使用了synchronized修饰符的. ...

  2. 知问前端——日历UI(三)

    datepicker日期选择选项 属性 默认值/类型 说明 minDate 无/对象.字符串或数值 日历中可以选择的最小日期 maxDate 无/对象.字符串或数值 日历中可以选择的最大日期 defa ...

  3. bzoj2002 弹飞绵羊 分块

    这道题是分块的初尝试 讲给定的区间n进行分块处理 这个每次修改的复杂的只有logn 很方便 代码是学黄学长的 http://hzwer.com/3505.html 当然里面还是有一定我自己的想法在里面 ...

  4. linux基础——文件的压缩解压缩以及vim编辑

       一.将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat  /etc/{passwd,group} > /1.txt  查看:cat /1.txt   二. ...

  5. javascript字符串中包含特殊字符问题

    我们都知道,在javascript中,字符串写在单引号或者双引号之中.因为这种要求,我们有些时候一些需要的字符串不能够被javascript解析,如下: "We are "Huma ...

  6. docker从零开始 存储(五)存储驱动介绍

    关于存储驱动程序 要有效地使用存储驱动程序,了解Docker如何构建和存储镜像以及容器如何使用这些镜像非常重要.您可以使用此信息做出明智的选择,以确定从应用程序中保留数据的最佳方法,并避免在此过程中出 ...

  7. 拒绝平庸——浅谈WEB登录页面设计

    用户活跃度是检验产品成功与否的重要指标之一,传统行业的商家极为重视门面的装潢,因为一个好的门面可以聚集人气,招揽更多的顾客.古时候的大户人家院子门口的石狮子或其他的摆件的摆放极为讲究,有一定的风水学说 ...

  8. Proxy(2016山东省省赛C)(最短路)(spfa)

    问题 C: Proxy 时间限制: 2 Sec  内存限制: 128 MB提交: 17  解决: 5[提交][状态][讨论版] 题目描述 Because of the GFW (Great Firew ...

  9. 树莓派编译nginx,支持rtmp直播

    树莓派3B+ 系统更新至最新 下载依赖 sudo apt-get update sudo apt-get install libxslt1-dev libgd-dev libgeoip-dev lib ...

  10. Robot Framework与Web界面自动化测试:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...