
最好将这种重复代码封装成方法
package com.itheima.d4_collection_test;import javax.swing.plaf.SliderUI;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;/*** 功能:* 1.做牌* 2.洗牌* 3.定义三个玩家* 4.发牌* 5.排序* 6.看牌*/public class GameDemo {/*** 1.定义一个静态的集合存储54张牌对象*/public static List<Card> allCards = new ArrayList<>();/*** 2. 做牌:定义静态代码块初始化牌数据 ( 加载类之后,就会加载静态代码块)* @param args*/// ( 加载类之后,就会加载静态代码块)static {// 3. 定义点数:个数确定,类型确定,使用数组String[] sizes = {"3","4","5","6","7","8","9","10","J","" +"Q","K","A","2"};// 4 定义花色:个数确定,类型确定,使用数组String[] colors = {"♠","❤","♣","♦"};// 5. 组合点数和花色int index = 0; // 记录牌的大小// 这里可以使用foreach(增强for) 遍历数组 数组名.forfor (String size : sizes) {index ++ ; // 每遍历一次牌的点数 大小就 + 1// 数组名.forfor (String color : colors) { // 一个点数,对应虽有的花色(4种)// 6 封装成一个牌的对象Card c = new Card(size,color,index); // 每次遍历到的点数和花色都创建一个Card对象// 7. 存入到集合容器中去allCards.add(c);}}// 8 .由于大小王特殊没有点数和花色,所以不加入for循环中,单独创建对象Card c1 = new Card("🃏","",++index); // 没有花色,直接定义为空字符串Card c2 = new Card("🤡","",++ index); // 先加1 在返回//使用 Collections工具类的addAll方法将所有对 象加入到集合中去Collections.addAll(allCards,c1,c2);System.out.println("新牌:" + allCards); // 写在静态类中,直接加载}public static void main(String[] args) {// 9. 洗牌:Collections.shuffle(allCards); // 使用Collections工具类的随机排序ApiSystem.out.println("洗牌后:" + allCards);// 10. 发牌:(定义三个玩家加,每个玩家的牌也是一个集合容器List<Card> linhuchong = new ArrayList<>();List<Card> jiumozhi = new ArrayList<>();List<Card> renyingying = new ArrayList<>();// 11. 开始发牌(从牌集合中发出51张牌给三个玩家,剩余三个牌作为底牌)// allCards = [[♣9, ♦9, ♣K, ♣A, ❤6, ♦K, ♣3, ♦Q, ♣5]// i 0 1 2 3 4 5 6 // 轮询的方法:对3求余:余数为0,发给第一个人为1发给第二个人for (int i = 0; i < allCards.size() -3; i++) { // 因为要留三张牌作为底牌所以 长度减三// 先拿到当前玩家对象Card c = allCards.get(i);if (i % 3 == 0){// 请阿冲接牌linhuchong.add(c); // 由于把玩家定义为了集合容器(负责接牌的对象)}else if (i % 3 == 1) {// 请阿jiu接牌jiumozhi.add(c);}else if (i % 3 == 2){// 请盈盈接牌renyingying.add(c);}}// 12. 拿到最后三张牌 这里用get方法比较低级low,用高级的sublist方法可以将集合截取// 参数意思:从倒数第51张牌开始截取(原来总数是54张牌,-3剩54,),一直到最后一张54-- 计算机包前不包后List<Card> lastThreeCards = allCards.subList(allCards.size() - 3,allCards.size());// 13. 给玩家的牌排序(从小到大 可以自己先试试怎么实现)sortCards(linhuchong);sortCards(jiumozhi);sortCards(renyingying);// 14. 输出玩家的牌[♣A, ♣5, ♠3, ❤5, ♦4, ❤2]System.out.println("阿冲" + linhuchong);System.out.println("阿jiu" + jiumozhi);System.out.println("盈盈" + renyingying);System.out.println("三张底牌" + lastThreeCards);}private static void sortCards(List<Card> cards) {// cards = [♣A, ♣5, ♠3, ❤5, ♦4, ❤2]Collections.sort(cards, new Comparator<Card>() { // 创建一个比较器,比较cards集合@Overridepublic int compare(Card o1, Card o2) {// o1 = J// o2 = A// 知道牌的大小,才可以指定规则return o2.getIndex() - o1.getIndex(); // 降序}});}}
package com.itheima.d4_collection_test;public class Card {private String size; // 这个是牌的点数private String color; // 这是牌的花色private int index; // 牌的真正的大小public Card() {}public Card(String size, String color, int index) {this.color = color;this.size = size;this.index = index;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getSize() {return size;}public void setSize(String size) {this.size = size;}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}// 重写一个toString方法,让他打印内容@Override // 在开发中不一定会用默认给的toString方法的格式public String toString() {return size + color; // 直接返回点数和花色}}
