基于顺序表ArrayList的洗牌算法(去除大小王)

笔记:

1.add() :添加元素 2.remove() :删除元素 3. get() :获取元素 4. set() :修改元素 5. size() :获取长度

6.sort(null) : 自然排序

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

全部评论

相关推荐

2025-12-18 20:11
门头沟学院 全栈开发
可以问你觉得程序员最好的出路是啥吗
用微笑面对困难:帮你问了我哥,他说程序员还有出路?
点赞 评论 收藏
分享
2025-12-16 21:24
蚌埠坦克学院 golang
一、&nbsp;项目相关问题关于“身份识别与访问系统”项目:请介绍一下这个项目和你负责的内容。这个项目是个人完成还是团队协作?项目的性质是什么?(如:课程项目、科研训练项目?)项目是给学校用的还是个人练手项目?关于“校园社交平台”项目:项目中“MySQL自增ID结合xxx实现平台ID生成方案”的具体实现是怎样的?这个自增ID是如何获取的?是否有专门用于生成ID的表?ID存储在哪里?具体获取ID的流程是什么?(是否是插入数据后获取返回的ID?)二、&nbsp;技术深度问题缓存与数据库一致性:详细说明在点赞评论场景下,如何实现99%的缓存数据库一致性。对于点赞这种高频更新的场景,先写数据库再删缓存的策略是否会导致缓存失效?如何优化?如果引入锁机制(如间隙锁)来保证强一致性,请详细解释间隙锁的原理、定义和作用范围。分布式锁:如何保证分布式锁操作的原子性?是否有实际使用Lua脚本的经验?(针对锁的原子释放)是否了解Redlock算法?它在Redis集群中是如何工作的?是否了解Redis集群本身的一致性机制?MySQL底层原理:MySQL索引的底层实现是什么?请讲解一下对B+树的理解。B+树的非叶子节点存储什么?在聚簇索引和非聚簇索引中,叶子节点和非叶子节点存储的内容有何不同?请解释一下MVCC(多版本并发控制)的原理。Go语言核心:你使用Go语言有多久了?请讲解一下Go的GMP调度模型。当一个Goroutine发生I/O阻塞时,M(机器线程)和P(逻辑处理器)是如何进行调度的?
查看24道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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