扑克模拟,牌型判断java版
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版的更多相关文章
- 蓝桥杯省赛 牌型种数java
小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张.这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺 ...
- (转)牛牛牌型判定(五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛>没牛)
牌型大小: 五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛(牛987654321) > 没牛,K > Q > J ……2 > A, 黑 ...
- 【教程】模拟登陆百度之Java代码版
[背景] 之前已经写了教程,分析模拟登陆百度的逻辑: [教程]手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 然后又去用不同的语言: Python的: [教程]模 ...
- java 牌型种数
牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得 ...
- java实现第六届蓝桥杯牌型整数
牌型整数 题目描述 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不 ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- 第6届蓝桥杯javaA组第7题,牌型种数,一道简单的题带来的思考
题目: 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到 ...
- 编写你的第一个 Java 版 Raft 分布式 KV 存储
前言 本文旨在讲述如何使用 Java 语言实现基于 Raft 算法的,分布式的,KV 结构的存储项目.该项目的背景是为了深入理解 Raft 算法,从而深刻理解分布式环境下数据强一致性该如何实现:该项目 ...
- 剑指offer(java版)【转】
面试题 2 :实现单例模式 1. 饿汉式单例类 public class SingletonClass { private static final SingletonClass instance=n ...
随机推荐
- cmd常用命令行
新建文件夹或文件 打开磁盘 F: 退出cmd exit 返回上一级 cd.. 创建文件夹 md 文件夹名 在d盘创建文件夹 md d:\文件夹名 在当前目录打开 ...
- 【BZOJ2330】【SCOI2011】糖果 [差分约束]
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 幼儿园 ...
- sphinx 分词搭建手册
步奏1. yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expa ...
- Method and apparatus for providing total and partial store ordering for a memory in multi-processor system
An improved memory model and implementation is disclosed. The memory model includes a Total Store Or ...
- 编译cuda Examples 时出现错误:/bin/ld cannot find -lglut
编译cuda Examples 时出现错误:/bin/ld cannot find -lglut ,可以先找找是否缺少库,有时候可能是symbolic link不正确,没有链接到正确位置,导致找不到库 ...
- Jxl、JxCell图表导出功能的实现
最近接触过许多报表导出功能,也用过多种工具进行导出功能的实现,但对于图表的导出一直没有仔细的去展开研究和探讨,直到最近略微整理了下这方面的需求和技术攻克. 首先导出excel功能的实现主要有JXL.J ...
- python特有的协程
#转载请联系 什么是协程呢? 线程包含在进程里面,协程包含在线程里面.协程也是和进程.线程一样,可以实现多任务.协程的切换开销比线程更小,不需要保存和恢复线程的状态.最通俗易懂的说法就是,协程是就是一 ...
- win32 读取文本文件,并进行字符串分割和存储
//分割字符 char *p;//p存放临时行指针 q存放临时每一行的列指针 char *hang[100]={0};//存储第一行 char *lie[300]={0} ...
- python算法:LinkedList(双向线性链表)的实现
LinkedList是一个双向线性链表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一 ...
- 从事前端开发必须要了解的CSS原理
从事Web前端开发的人都与CSS打交道很多,有的人也许不知道CSS是怎么去工作的,写出来的CSS浏览器是怎么样去解析的呢?当这个成为我们提高CSS水平的一个瓶颈时,是否应该多了解一下呢? 一.浏览器的 ...