洗牌算法,去除大小王

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+"} ";
    }
}

全部评论

相关推荐

1.&nbsp;介绍Java异常的分类?&nbsp;Spring&nbsp;Boot项目中,如何进行数据库操作的异常处理?2.&nbsp;Spring事务注解(@Transactional)的使用和参数配置?事务回滚的条件和触发方式?事务传播属性的设置和应用场景?3.&nbsp;介绍Java集合框架的整体结构?&nbsp;List,&nbsp;Set,&nbsp;Map&nbsp;特点,实现4.&nbsp;Set&nbsp;集合哪些实现类是有序的?5.&nbsp;ArrayList和LinkedList的区别6.&nbsp;介绍HashMap的底层结构和特点?HashMap的put操作过程?7.&nbsp;HashMap中判断key相同的方法?8.&nbsp;HashMap的key是否可以为nul?&nbsp;HashMap中null&nbsp;key的存储方式(固定存储在数组的索引0处)9.&nbsp;HashMap的遍历方式10.&nbsp;并发安全集合的了解?&nbsp;ConcurrentHashMap,CopyOnWriteArrayList的理解11.&nbsp;线程创建的方式?&nbsp;&nbsp;JDK自带的线程池类型及其特点12.&nbsp;线程池的工作流程和核心参数?13.&nbsp;核心线程和非核心线程的区别?&nbsp;线程池如何标识一个线程是核心线程还是非核心线程?14.&nbsp;说说实习SQL调优过程15.&nbsp;EXPLAIN主要关注什么字段16.&nbsp;B+树特点?17.&nbsp;Redis哈希结构的具体使用方式18.&nbsp;可以对哈希表设置过期时间吗?&nbsp;能对哈希表里的每行键值对设置过期时间吗?19.&nbsp;Redis&nbsp;list结构的使用场景?&nbsp;相关API?&nbsp;&nbsp;为什么能作为消息队列20.&nbsp;Spring中注入bean的方式?&nbsp;&nbsp;@Autowired和@Resource注解的区别21.&nbsp;Spring循环依赖问题及其解决机制?22.&nbsp;spring三级缓存可以完全解决循环依赖问题吗?(不能解决非单例场景的循环依赖,不能解决构造器注入的循环依赖(因为三级缓存是通过反射创建对象缓存到三级缓存里,构造器注入对象尚未创建)&nbsp;)23.&nbsp;Linux部署项目的具体过程?&nbsp;Java如何启动项目?&nbsp;&nbsp;Java如何后台启动项目24.&nbsp;grep命令怎么查前100行和后一百行?(-B&nbsp;100&nbsp;前100行&nbsp;-A&nbsp;后100行&nbsp;-C&nbsp;前后100行)25.&nbsp;说说令牌方法保证幂等性
查看25道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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