黑马程序员技术交流社区
标题:
对手里的17张牌按照大小黑红梅方的顺序进行排序
[打印本页]
作者:
大大大卷
时间:
2015-10-6 21:49
标题:
对手里的17张牌按照大小黑红梅方的顺序进行排序
今天学习了用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, 小王, 大王]
测试成功
作者:
哈哈我赢了
时间:
2015-10-6 22:11
学习一下。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2