洗牌算法,去除大小王

import java.util.ArrayList;
import java.util.List;

public class Test  {
    public static void main(String[] args) {
	  //买牌
     CardDemo cardDemo=new CardDemo();
     List<Card> cardList=cardDemo.buycard();
     //洗牌
     cardDemo.wash(cardList);
        System.out.println(cardList);
     //玩牌3个人每人发5张
        List<List<Card>> ret = cardDemo.play(cardList);
        for (int i = 0; i < ret.size(); i++) {
            System.out.println("第"+(i+1)+"个人的牌"+ret.get(i));
        }
        System.out.println(cardList);
    }
}

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: czt20
 * Date: 2025 -12-07
 * Time: 21:36
 */
public class CardDemo {
    String[] suits = {"♣", "♠", "♦", "♥"};

    public List<Card> buycard() {
        List<Card> cardList = new ArrayList();
        for (int i = 1; i <= 13; i++) {
            for (int j = 0; j < 4; j++) {
                int rank = i;
                String suit = suits[j];
                Card card = new Card(suit, rank);
                cardList.add(card);
            }
        }
        return cardList;
    }

    public void wash(List<Card> cardList){
       Random random =new Random();
        for (int i = cardList.size()-1; i >0 ; i--) {
            int index= random.nextInt(i);
            swap(cardList,i,index);
        }
    }
    private void swap(List<Card> cardList,int i,int j){
        Card m=cardList.get(i);
        cardList.set(i,cardList.get(j));
        cardList.set(j,m);
    }

    public  List<List<Card>> play(List<Card> cardList ){
        List<Card>  hand1 = new ArrayList<>();
        List<Card>  hand2 = new ArrayList<>();
        List<Card>  hand3 = new ArrayList<>();

        List<List<Card>>  hand =new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3 ; j++) {
                Card card = cardList.remove(0);
                hand.get(j).add(card);

            }
        }
     return  hand;
    }
}

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: czt20
 * Date: 2025 -12-07
 * Time: 21:34
 */
public class Card {
    private String suit;
    private int rank;

    public Card(String suit, int rank) {
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    public String toString() {
       /* return "Card{" +
                "suit='" + suit + '\'' +
                ", rank=" + rank +
                '}';
        */
        return "{"+suit+rank+"} ";
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 11:07
点赞 评论 收藏
分享
TimeLine:11.28&nbsp;一面12.3&nbsp;二面12.5&nbsp;HR面,下午直接发offer项目:知光平台&nbsp;+&nbsp;点评一面1.&nbsp;自我介绍(介绍学历+项目)2.&nbsp;介绍一下知光中&nbsp;Feed&nbsp;流中用到的三级缓存?(本地缓存+Redis&nbsp;页面缓存+Redis&nbsp;片段缓存)3.&nbsp;你知光的项目中怎么保证的&nbsp;Caffeine,&nbsp;Redis&nbsp;和&nbsp;MySQL&nbsp;的一致性4.&nbsp;某一个用户发帖,他的粉丝是怎么收到的?(项目中还没做,简单说了下思想)5.&nbsp;推流模式对于大V是不是有问题?6.&nbsp;Redis&nbsp;数据结构,重点讲一下&nbsp;ZSet7.&nbsp;设计一个&nbsp;key&nbsp;去重,value&nbsp;排序的数据结构(其实就是&nbsp;ZSet)8.&nbsp;秒杀怎么设计的,lua&nbsp;脚本怎么实现的9.&nbsp;分布式缓存是怎么选择节点的?10.&nbsp;一致性&nbsp;hash&nbsp;怎么做的?11.&nbsp;B+&nbsp;树底层原理,延伸到索引12.&nbsp;讲一下&nbsp;go&nbsp;的&nbsp;channel&nbsp;和协程的用法和你的理解13.&nbsp;算法:力扣&nbsp;1838&nbsp;最高频元素的频数(冷门,字节喜欢出这种)14.&nbsp;反问二面整个二面大部分都在围绕操作系统底层拷打,算法题也不常规1.&nbsp;自我介绍(学历+项目)2.&nbsp;什么情况会出现缓存穿透,你项目中有处理过这个吗?3.&nbsp;除了缓存空值还能怎么解决,如何在查询之前判断数据库里是否有某个值4.&nbsp;讲讲你项目中的&nbsp;hotkey&nbsp;怎么设计的?5.&nbsp;什么是&nbsp;Outbox&nbsp;模式?为什么用&nbsp;Canal?具体讲讲6.&nbsp;问&nbsp;ProtoBuf&nbsp;协议了解的多不多(就&nbsp;RPC&nbsp;的那个二进制传输协议)7.&nbsp;如何优化读取一个大文件(没答出来)类似于&nbsp;10亿个QQ号,如何快速查找。8.&nbsp;协程和线程的区别,为什么协程切换更快9.&nbsp;内核态切换10.&nbsp;操作系统内存映射&nbsp;mmap11.&nbsp;Go&nbsp;语言,GMP&nbsp;模型12.&nbsp;算法题(面试官直接口述):一个数组求和,每个元素都在int范围内,保证最终的结果在int范围内,但是中间会溢出,怎么实现13.&nbsp;反问
查看25道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务