Java基础第9天总结(可变参数、Collections、斗地主)

  • 认识可变参数
java 复制代码
package Demo;

import java.util.Arrays;

public class ParamDemo {
    //认识可变参数
    public static void main(String[] args) {
        sum();//不传参数
        sum(1);//传一个参数
        sum(1,2,3,4,5);//传多个参数
        sum(new int[]{1,2,3});//传一个数组参数
    }
    //注意事项:可变参数必须是最后一个参数,且只能有一个可变参数
    public static void sum(int...nums){
        System.out.println(nums.length);
        System.out.println(Arrays.toString(nums));
        System.out.println("-------------");

    }
}

输出:

0


1

1


5

1, 2, 3, 4, 5


3

1, 2, 3




  • Collections
java 复制代码
package Demo;

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

public class ParamDemo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        //1、Collections的方法批量加
        Collections.addAll(list, 1,2,3,4,5);
        System.out.println(list);
        //2、打乱顺序
        Collections.shuffle(list);
        System.out.println(list);
        //3、排序
        Collections.sort(list);
        System.out.println(list);
        //4、自定义排序
        Collections.sort(list, (s1,s2)->Integer.compare(s2,s1));
        System.out.println(list);
    }
}

输出:

1, 2, 3, 4, 5

3, 4, 5, 1, 2

1, 2, 3, 4, 5

5, 4, 3, 2, 1



  • 斗地主游戏案例
java 复制代码
package DouDiZhu;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Card {
    private String size;
    private String color;
    private int num;//大小

    @Override
    public String toString() {
        return size + color;
    }
}
java 复制代码
package DouDiZhu;

import java.util.*;

public class Room {
        //1、准备好54张牌:定义一个容器装54张牌
        private List<Card> allcards = new ArrayList<>();
        //2、初始化54张牌进去
        {
            //3、准备点数
            String[] sizes = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
            //4、准备花色
            String[] colors = {"♠", "♥", "♣", "♦"};
            //5、组合点数和花色成为牌对象,加入到集合中
            int count=1;
            for(String size : sizes){
                for(String color : colors){
                    //6、创建牌对象
                    Card card = new Card(size, color, count++);
                    //7、加入集合
                    allcards.add(card);
                }
            }
            Collections.addAll(allcards, new Card("", "🃏", count++), new Card("", "👲", count));
            System.out.println("新牌是" + allcards);
        }
        public void start() {
            //8、洗牌:随机打乱集合中的顺序
            Collections.shuffle(allcards);
            System.out.println("洗牌后:" + allcards);
            //9、发牌:定义三个玩家:令狐冲=【】、令狐白=【】、令狐紫=【】
            Map<String,List< Card>> players = new HashMap<>();
            List< Card> lhc = new ArrayList<>();
            players.put("令狐冲", lhc);
            List< Card> lhb = new ArrayList<>();
            players.put("令狐白", lhb);
            List< Card> lhz = new ArrayList<>();
            players.put("令狐紫", lhz);
            for(int i = 0; i < allcards.size(); i++){
                Card card = allcards.get(i);
                if(i % 3 == 0){
                    lhc.add(card);
                }else if(i % 3 == 1){
                    lhb.add(card);
                }else{
                    lhz.add(card);
                }
            }
            //10、拿最后三张底牌
            List<Card> lastCards = allcards.subList(allcards.size() - 3, allcards.size());
            System.out.println("底牌是:" + lastCards);
            //抢地主:把这个集合直接倒给玩家
            lhz.addAll(lastCards);
            //11、对牌排序
            sortCards(lhc);
            sortCards(lhb);
            sortCards(lhz);
            //12、看牌
            Set<Map.Entry<String, List<Card>>> entries = players.entrySet();
            for(Map.Entry<String, List<Card>> entry : entries){
                String name = entry.getKey();
                List<Card> cards = entry.getValue();
                System.out.println(name + "的牌是:" + cards);
            }

        }

    private void sortCards(List<Card> cards) {
            Collections.sort(cards, (c1,c2)->Integer.compare(c2.getNum(),c1.getNum()));
        //Collections.sort(cards, (c1,c2)->{return c2.getNum()-c1.getNum();});等价
    }
}
java 复制代码
package DouDiZhu;

public class Game {
    public static void main(String[] args) {
        Room r = new Room();
        r.start();
    }
}
java 复制代码
输出:
新牌是[3♠, 3♥, 3♣, 3♦, 4♠, 4♥, 4♣, 4♦, 5♠, 5♥, 5♣, 5♦, 6♠, 6♥, 6♣, 6♦, 7♠, 7♥, 7♣, 7♦, 8♠, 8♥, 8♣, 8♦, 9♠, 9♥, 9♣, 9♦, 10♠, 10♥, 10♣, 10♦, J♠, J♥, J♣, J♦, Q♠, Q♥, Q♣, Q♦, K♠, K♥, K♣, K♦, A♠, A♥, A♣, A♦, 2♠, 2♥, 2♣, 2♦, 🃏, 👲]
洗牌后:[10♣, 3♠, 4♣, 10♦, A♣, 7♠, 8♣, Q♥, 7♥, 8♠, 8♥, 6♠, 2♣, 3♣, 5♥, 6♥, K♣, 2♥, A♦, 9♠, J♣, 9♦, 3♦, 👲, K♦, 5♠, K♠, 7♣, 🃏, A♠, J♠, 10♥, Q♠, 8♦, 2♦, 9♥, 6♣, 5♦, J♦, J♥, 7♦, Q♦, 5♣, 4♥, 4♦, 2♠, A♥, 9♣, 4♠, K♥, Q♣, 6♦, 10♠, 3♥]
底牌是:[6♦, 10♠, 3♥]
令狐冲的牌是:[2♣, 2♠, A♦, K♦, J♥, J♠, 10♦, 10♣, 9♦, 8♦, 8♣, 8♠, 7♣, 6♦, 6♣, 6♥, 5♣, 4♠]
令狐白的牌是:[🃏, 2♦, A♣, A♥, K♣, K♥, Q♥, 10♥, 10♠, 9♠, 8♥, 7♦, 5♦, 5♠, 4♥, 3♦, 3♣, 3♠]
令狐紫的牌是:[👲, 2♥, A♠, K♠, Q♦, Q♣, Q♠, J♦, J♣, 10♠, 9♣, 9♥, 7♥, 7♠, 6♦, 6♠, 5♥, 4♦, 4♣, 3♥, 3♥]
相关推荐
Lin_Aries_0421几秒前
容器化简单的 Java 应用程序
java·linux·运维·开发语言·docker·容器·rpc
脑花儿7 分钟前
ABAP SMW0下载Excel模板并填充&&剪切板方式粘贴
java·前端·数据库
techdashen31 分钟前
12分钟讲解Python核心理念
开发语言·python
北风朝向41 分钟前
Spring Boot参数校验8大坑与生产级避坑指南
java·spring boot·后端·spring
闭着眼睛学算法41 分钟前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
山海不说话43 分钟前
Java后端面经(八股——Redis)
java·开发语言·redis
郝学胜-神的一滴1 小时前
谨慎地迭代函数所收到的参数 (Effective Python 第31条)
开发语言·python·程序人生·软件工程
哈哈很哈哈1 小时前
Flink SlotSharingGroup 机制详解
java·大数据·flink
真的想不出名儿1 小时前
springboot - 邮箱验证码登录
java·springboot·邮箱验证
the beard1 小时前
JVM垃圾回收器深度解析:从Serial到G1,探索垃圾回收的艺术
java·jvm