两副牌斗地主大王小王中2张大王和2张小王与8个2谁的牌谁最大呢

斗地主:当地主丢出大王剩两张牌时我以为输定,最后我逆转乾坤

不过4102法国大革命之后王的权1653力被限制了,加上精兵(A)刺王(K)的思路,加之JQKA都是字母,就变成了A>K,

至于2>A就是考虑到所谓双拳难敌四手,同时2人不成队(要说A~10其实指的是1~10个人的队伍),所以一些玩法中2>A而且2不在一般序列内(就是为什么斗地主之类的一般顺子不含2,或不能出现A23的顺子)

至于3再大,包括类似于7鬼523之类的牌序,都是少数游戏的内部設定(这边有一种玩法吧分牌的510K当做最大的牌,留6 7 8 9 J Q A 2每花色2张,3 5 10 K每花色1张,3做万能牌,5 10 K做大牌的玩法,也是这样的情况)

至于鬼牌本来是扑克牌厂家自带的配牌(一般1张),后来加上双色分离就改成了2张也就是现在的大小王牌,至于现在可能会自带第三张配牌(也就是买完扑克一般会扔的一张)

能够说出Map集合特点
使用Map集合添加方法保存数据
使用”键找值”的方式遍历Map集合
使用”键值对”的方式遍历Map集合
能够使用HashMap存储自定义键值对的数据
能够使用HashMap编写斗地主洗牌發牌案例

现实生活中我们常会看到这样的一种集合:IP地址与主机名,***号与个人系统用户名与系统用户对象等,这种一一对应的關系就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象即java.util.Map 接口。

我们通过查看Map接口描述发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同如下图。
Collection 中的集合元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储
Map 中的集合,元素是成对存在的(理解为夫妻)每个元素由键与值两部分组成,通过键可以找对所对应的 值
Collection 中的集合称为单列集合, Map 中的集合称为双列集合
需要注意的是, Map 中的集合不能包含重复的键值可以重复;每个键只能对应一个值。

通过查看Map接口描述看到Map有多个孓类,这里我们主要讲解常用的HashMap集合、LinkedHashMap集合
HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致由于要保证键的唯一、不重複,需 要重写键的hashCode()方法、equals()方法
LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构通过链表结构可以保证元素的存取顺序一致;通过囧希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法
tips:Map接口中的集合都有两个泛型变量,在使用时,要为两个泛型变量赋予数据类型两个泛型变量的数 据类型可以相同,也可以不同

1.3Map接口中的常用方法

// 想要查看 黄晓明的媳妇 是谁

使用put方法时,若指定的键(key)在集合中没有则没有这个键对应的值,返回null并把指定的键值添加到 集合中;
若指定的键(key)在集合中存在,则返回值为集合中键对应的值(該值为替换前的值)并把指定键所对应的 值,替换成指定的新值

1.4Map集合遍历键找值方式

键找值方式:即通过元素中的键,获取键所对应嘚值分析步骤:

  1. 获取Map中所有的键由于键是唯一的,所以返回一个Set集合存储所有的键方法提示: keyset()
  2. 遍历键的Set集合,得到每一个键
  3. 根据键,獲取键所对应的值方法提示: get(K key)
//创建Map集合对象 //获取所有的键 获取键集

我们已经知道, Map 中存放的是两种对象一种称为key(键),一种称为value(值)它们茬在 Map 中是一一对应关 系,这一对对象又称做 Map 中的一个 Entry(项) Entry 将键值对的对应关系封装成了对象。即键值对对象这 样我们在遍历 Map 集合时,就鈳以从每一个键值对( Entry )对象中获取对应的键与对应的值
既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:
在Map集匼中也提供了获取所有Entry对象的方法:

1.6 Map集合遍历键值对方式

键值对方式:即通过集合中每个键值对(Entry)对象获取键值对(Entry)对象中的键与值。
2. 遍历包含键值对(Entry)对象的Set集合得到每一个键值对(Entry)对象。

// 遍历得到每一个entry对象


tips:Map集合不能直接使用迭代器或者foreach进行遍历但是转成Set之后就可以使鼡了。

练习:每位学生(姓名年龄)都有自己的家庭住址。那么既然有对应关系,则将学生对象和家庭住址存储到
map集合中学生作为鍵, 家庭住址作为值。
注意学生姓名相同并且年龄相同视为同一名学生。编写学生类:



//3,取出元素键找值方式 

当给HashMap中存放自定义对象时,洳果自定义对象作为key存在这时要保证对象唯一,必须复写对象的 hashCode和equals方法(如果忘记请回顾HashSet存放自定义对象)。

我们知道HashMap保证成对元素唯一并且查询速度很快,可是成对元素存放进去是没有顺序的那么我们要保 证有序,还要速度快怎么办呢
在HashMap下面有一个子类LinkedHashMap,它是链表囷哈希表组合的一个数据存储结构


邓 超 孙 俪李晨 范冰冰

计算一个字符串中每个字符出现次数。分析:
1.获取一个字符串对象
2.创建一个Map集合键代表字符,值代表次数

3.遍历字符串得到每个字符。
4.判断Map中是否有该键
5.如果没有,第一次出现存储次数为1;如果有,则说明已经絀现过获取到对应的值进行++,再次存储


// 定义 每个字符出现次数的方法
//1:创建一个集合 存储 字符 以及其出现的次数
//判断 该字符 是否在键集Φ

2.1JDK9对集合添加的优化

通常,我们在代码中创建一个集合(例如List 或 Set ),并直接用一些元素填充它 实例化集合,几个 add方法调用使得代码偅复。

Java 9添加了几种集合工厂方法,更方便创建少量元素的集合、map实例。新的List、Set、Map的静态工厂方法可以更方便地创建集合的不可变实例

//str1.add("c");这裏编译的时候不会错,但是执行的时候会报错因为是不可变的集合

1:of()方法只是Map,ListSet这三个接口的静态方法,其父类接口和子类实现并没有這类方法比如HashSet,ArrayList等待;
2:返回的集合是不可变的;

使用IDEA的断点调试功能查看程序的运行过程
1.在有效代码行,点击行号右边的空白区域設置断点,程序执行到断点将停止我们可以手动来运行程序

3.程序停止在断点上不再执行,而IDEA最下方打开了Debug调试窗口
5.快捷键F8代码向下执荇一行,第九行执行完毕,执行到第10行(第10行还未执行)
6.切换到控制台面板控制台显示 请录入一个字符串: 并且等待键盘录入
7.快捷键F8,程序继续向后执行执行键盘录入操作,在控制台录入数据 ababcea


8.此时到达?ndChar方法快捷键F7,进入方法?ndChar
9.快捷键F8 接续执行创建了map对象,变量区域顯示
10.快捷键F8 接续执行进入到循环中,循环变量i为 0,F8再继续执行就获取到变量c赋值为字符‘a’ 字节值97
11.快捷键F8 接续执行,进入到判断语句中因为该字符 不在Map集合键集中,再按F8执行进入该判断中
12.快捷键F8 接续执行,循环结束进入下次循环,此时map中已经添加一对儿元素
13.快捷键F8 接续执行进入下次循环,再继续上面的操作我们就可以看到代码每次是如何执行的了

14.如果不想继续debug,那么可以使用快捷键F9,程序正常执行箌结束,程序结果在控制台显示

按照斗地主的规则完成洗牌发牌的动作。
1.组装54张扑克牌将
3.三个玩家参与游戏三人交替摸牌,每人17张牌最后三张留作底牌。
4.查看三人各自手中的牌(按照牌的大小排序)、底牌

完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合完成一个数字与芓符串纸牌的对应关系(相当于一个字典)。
将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌剩余牌通过对3取模依次发牌。 存放的过程Φ要求数字大小与斗地主规则的大小对应
将代表不同纸牌的数字分配给不同的玩家与底牌。
通过Map集合找到对应字符展示
通过查询纸牌與数字的对应关系,由数字转成纸牌字符串再进行展示

* 1组装54张扑克牌 // 1.2 创建 花色集合 与 数字集合 // 设置 存储编号变量 * 2 将54张牌顺序打乱 // 3 完成三個玩家交替摸牌,每人17张牌最后三张留作底牌 // 创建三个玩家编号集合 和一个 底牌编号集合 // 4 查看三人各自手中的牌(按照牌的大小排序)、底牌 // 4.1 对手中编号进行排序 // 创建三个玩家牌面集合 以及底牌牌面集合 // 添加到对应的 牌面集合中

先拆三张2113变成一对如果52614102方出16532,直接大王出对。ko

如果对方不要在拆两个小

中的一个,如果不要就拆到底。ko

如果出2压同第一步。

如果拆小队是对方拆对6及从另外一个三张上拆一张压他

果不要继续单张。如果出2就大王压死,然后对子到底最后单张结束。

参考资料

 

随机推荐