认识可变参数
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
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]
- 斗地主游戏案例
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; } }
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();});等价 } }
package DouDiZhu; public class Game { public static void main(String[] args) { Room r = new Room(); r.start(); } }
输出: 新牌是[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♥]