扑克模拟,牌型判断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 ...
随机推荐
- c++对拍实现
直接上代码吧. #include<bits/stdc++.h> using namespace std; int main(){ while(1){ system("./cute ...
- 【BZOJ3029】守卫者的挑战 [期望DP]
守卫者的挑战 Time Limit: 2 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 打开了黑魔法师Vani的大门,队 ...
- 好几次的CSS存档
第一次: #site_nav_under { display: none; } .c_ad_block, .ad_text_commentbox { display: none; margin:; p ...
- 【洛谷 P1070】道路游戏 (DP)
题目链接 这题还是很好想的,看到\(90%\)的数据点时,我就知道要用\(n^3\)的算法(最后10分就算了吧) 然后,数据水,直接暴力\(n^3\)卡过了. 显然是道DP. 设\(f[i]\)表示第 ...
- [bzoj1031][JSOI2007]字符加密Cipher——后缀数组
Brief Description 给定一个长度为n的字符串,你需要对其进行加密. 把字符串围成一个环 显然从任意一个位置开始都可以有一个长度为n的串 把产生的n个串按字典序排序,把这n个串的最后一个 ...
- bzoj 1061 志愿者招募 费用流
详见BYV的博客,写的非常全面https://www.byvoid.com/blog/noi-2008-employee /************************************** ...
- mongoDB的简单使用
1.客户端连接: ./mongo 2.数据库 一个mongodb中可以建立多个数据库. MongoDB的默认数据库为"db",该数据库存储在data目录中. MongoDB的单个实 ...
- UVa 12265 贩卖土地 单调栈
题意 输入一个\(n\times m\)的矩阵,每个格子可能是空地,也可能是沼泽.对于每个空地格子,求出以它为右下角的空矩形的最大周长,然后统计每个周长出现了多少次. 思路 对于 每一行 每两个沼泽之 ...
- c 語言 控制碼
source code #include <stdio.h> int main() { char *test = "ABC\x41\n"; printf("s ...
- Bean装配之@Autowired注解
@Required(不常用) @Autowired(常用) 下面用例子解释以上内容: @Autowired注解的三种方式如下,第一种是直接在属性名上加注解,这样就可以不用在写set方法进行注入,这种方 ...