大家应该都打过手机麻将,那么手机麻将发牌之后,是如何将我们的牌排序的呢?
下面就是一个麻将排序算法,这只是个示例,后面自己根据业务扩展吧,希望会有帮助
直接上代码
@Test
public void testMajiang(){
LinkedList<Majiang> list = new LinkedList<>();
list.add(new Majiang(3, 1));
list.add(new Majiang(2, 3));
list.add(new Majiang(3, 7));
list.add(new Majiang(1, 1));
list.add(new Majiang(3, 8));
list.add(new Majiang(2, 2));
list.add(new Majiang(3, 2));
list.add(new Majiang(1, 3));
list.add(new Majiang(3, 9));
majiangSort(list);
}
public void majiangSort(LinkedList<Majiang> list){
//先对点数进行分组
//LinkedList列表,里面定义长度9,有9个
LinkedList[] pointList = new LinkedList[9];
for (int i = 0; i < pointList.length; i++){
//初始化9个LinkedList()
pointList[i] = new LinkedList();
}
while (list.size() > 0){
//从list中一个个取出对象知道取完为止
Majiang majiang = list.remove();
/**
* 下面这个位置初学者可能不是一下就明白的
* 可以试着举几个例子就明白了
*/
pointList[majiang.point -1] .add(majiang);
}
//把九个合并到一起,这个时候list全部被取出了,是空的
//然后再将list填充
for (int i = 0; i < pointList.length; i++){
list.addAll(pointList[i]);
}
System.out.println("点数排序结束后--"+list.toString());
// 点数排序结束后--[(3 1), (1 1), (2 2), (3 2), (2 3), (1 3), (3 7), (3 8), (3 9)]
//先对花色进行分组,三种花色
LinkedList[] colorList = new LinkedList[3];
for (int i = 0; i < colorList.length; i++){
colorList[i] = new LinkedList();
}
while (list.size() > 0){
Majiang majiang = list.remove();
colorList[majiang.color -1] .add(majiang);
}
//把三个合到一起
//把三个合并到一起,这个时候list全部被取出了,是空的
for (int i = 0; i < colorList.length; i++){
list.addAll(colorList[i]);
}
System.out.println("最后花色排好--"+list.toString());
// 最后花色排好--[(1 1), (1 3), (2 2), (2 3), (3 1), (3 2), (3 7), (3 8), (3 9)]
}
下面是javabean
public class Majiang {
public int color;//筒,万,条
public int point;//点数 一 二 三 四 。。。。九
public Majiang(int color, int point) {
this.color = color;
this.point = point;
}
@Override
public String toString() {
return "("+this.color +" "+this.point +")";
}
}