JAVA数据结构与算法(二)

大家应该都打过手机麻将,那么手机麻将发牌之后,是如何将我们的牌排序的呢?

下面就是一个麻将排序算法,这只是个示例,后面自己根据业务扩展吧,希望会有帮助

 

直接上代码

 

 @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 +")";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值