今天学习了用ArrayList模拟斗地主发牌,之后老师说对手里的牌排序,但是留了一个白,后来我想了想,可以这样实现
代码如下
- package day17.coll.test;
- import java.util.Comparator;
- public class MyComparator implements Comparator<String> {
- /**
- * 创建两个表,一个是花色表,一个是大小表
- */
- private static String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
- private static String[] color = {"黑桃","红桃","梅花","方块","小王","大王"};
- //private static String[] ghost = {"小王","大王"};
- @Override
- public int compare(String s1, String s2) {
-
- //返回这两张牌的自定义Hash值的差
- return getHC(s1)-getHC(s2);
-
-
- }
- /*
- * 查表
- */
- private int getIndex(String[] s,String str){
- for (int i = 0; i < s.length; i++) {
- if(s[i].equals(str)){
- return i;
- }
- }
- return -1;
- }
- /**
- * 计算每张牌的自定义Hash值,把每张牌分为两部分,分别查表,计算得到的索引值
- * 为了保证大小王比所有牌大,并且数字的权重大于花色,因此计算是分配了不同的权重
- * @param s 传入的牌
- * @return 该牌的自定义Hash值
- */
-
- private int getHC(String s){
- //如果这张牌不是大王或者小王,那么就分解,并分别查表,最后得到一个数字权重为100,花色权重为1的hash值
- if(s.length()!=2){
- return (getIndex(num,s.substring(2))+1)*100+(getIndex(color,s.substring(0, 2))+1);
- }
- //如果是大小王,那么返回一个权重为1000的hash值
- else{
- return getIndex(color,s.substring(0, 2))*1000;
- }
- }
- }
复制代码
这是牌库的代码
- package day17.coll.test;
- import java.util.ArrayList;
- public class Paiku {
- static String[] s = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
- static String[] s1 = {"黑桃","红桃","梅花","方块"};
- static ArrayList<String> al = null;
- public Paiku(){
- }
-
- public static ArrayList<String> getPaiku(){
- al = new ArrayList<String>();
- al.add("大王");
- al.add("小王");
-
- for(String color:s1){
- for(String num:s){
- al.add(color+num);
- }
- }
- return al;
- }
-
- }
复制代码
测试代码
- package day17.coll.test;
- import java.util.ArrayList;
- import java.util.Collections;
- public class CollTest {
- public static void main(String[] args) {
- ArrayList<String> al = Paiku.getPaiku();
-
- //System.out.println(al);
- Collections.shuffle(al);
- Collections.sort(al,new MyComparator());
- System.out.println(al);
复制代码
输出结果是
[黑桃3, 红桃3, 梅花3, 方块3, 黑桃4, 红桃4, 梅花4, 方块4, 黑桃5, 红桃5, 梅花5, 方块5, 黑桃6, 红桃6, 梅花6, 方块6, 黑桃7, 红桃7, 梅花7, 方块7, 黑桃8, 红桃8, 梅花8, 方块8, 黑桃9, 红桃9, 梅花9, 方块9, 黑桃10, 红桃10, 梅花10, 方块10, 黑桃J, 红桃J, 梅花J, 方块J, 黑桃Q, 红桃Q, 梅花Q, 方块Q, 黑桃K, 红桃K, 梅花K, 方块K, 黑桃A, 红桃A, 梅花A, 方块A, 黑桃2, 红桃2, 梅花2, 方块2, 小王, 大王]
测试成功
|
|