扑克模拟,牌型判断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 ...
随机推荐
- 链接oracle数据库 生成表对应的javabean
package com.databi.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOExc ...
- 膨胀、腐蚀、开、闭(matlab实现)
膨胀.腐蚀.开.闭运算是数学形态学最基本的变换. 本文主要针对二值图像的形态学 膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔): B=[0 1 0 1 1 1 ...
- redis连接池自动释放
http://blog.itpub.net/29485627/viewspace-1977880/
- bzoj3223 文艺平衡树 codevs3303 翻转区间
splay模版题吧 只有区间翻转 至于为什么要把须翻转区间旋到根 因为查找一个区间可以先找出他左端点左边第一个点和右端点x右边第一个点y 然后将x旋到根节点 y旋到x的右儿子 这样x的右边的点就是所有 ...
- NYOJ 349 Sorting It All Out (拓扑排序 )
题目链接 描述 An ascending sorted sequence of distinct values is one in which some form of a less-than ope ...
- HDU3746(KMP求循环节)
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Java坦克大战 (四) 之子弹的产生
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- 使用div实现progress进度条
在百度上搜了很多方法去修改HTML5 progress的样式,然而并没有实现. 所以自己用div实现了一个. 简单粗暴(*^-^*) 可以在CSS里改样式,可以JS里改进度. <div cla ...
- 无界面运行Jmeter压测脚本
今天在针对单一接口压测时出现了从未遇到的问题,设好并发量后用调度器控制脚本的开始和结束,但在脚本应该自动结束时间,脚本却停不下来,手动stop报告就会有error率,卡了我很久很久不能解决,网络上也基 ...
- OpenAcc社区版安装教程(Linux版)(更新版)
官方安装过程如下图所示 1.安装前 下载OpenAcc社区版 1,目前为止的最新版,平台是Linux,选择Linux x86-64. 我的服务器系统是CentOs 下载地址链接:https://www ...