1.可变参数
一种特殊形参,定义在方法、构造器的形参列表中,格式:数据类型...参数名称
特点:可以不传数据给他,可以同时传一个或多个数据给他;也可以传数组给他。
好处:用来灵活接受数组。
public class test {
public static void main(String[] args) {
// 特征
test(); // 不传数据
test(10); // 传输一个数据常会给
test(10, 20, 30); // 传递多个数据常会给它
test(new int[]{10, 20, 30, 40}); // 传输一个数组给可变参数
}
public static void test(int... nums) {
// 可变参数在方法内部,本质就是一个数组。
System.out.println(nums.length);
System.out.println(Arrays.toString(nums));
System.out.println("-------------------------");
}
}
注意事项:
(1)一个形参列表只能有一个可变参数。
(2)可变参数必须放在形参列表的最后面。
2.Collectiongs
不是Collection,是一个操作集合的工具类。
public class test {
public static void main(String[] args) {
// 示例1: 使用 addAll 方法
List<String> list1 = new ArrayList<>();
Collections.addAll(list1, "A", "B", "C");
System.out.println("List after addAll: " + list1);
// 示例2: 使用 shuffle 方法
Collections.shuffle(list1);
System.out.println("Shuffled List: " + list1);
// 示例3: 使用 sort 方法
List<Integer> list2 = new ArrayList<>();
list2.add(5);
list2.add(1);
list2.add(3);
Collections.sort(list2);
System.out.println("Sorted List: " + list2);
// 示例4: 使用带比较器的 sort 方法
List<String> list3 = new ArrayList<>();
list3.add("banana");
list3.add("apple");
list3.add("cherry");
Collections.sort(list3, new Comparator<String>() {// 自定义比较器
@Override
public int compare(String a, String b) {
return b.compareTo(a); // 按降序排序
}
});
System.out.println("Sorted List with Comparator: " + list3);
}
}
3.综合案例:斗地主
运行
public class test {
public static void main(String[] args) {
// 示例1: 使用 addAll 方法
Room room1 = new Room();
room1.start();
}
}
主函数
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Room {
// 创建一副54张的扑克牌
List<Card> allCards = new ArrayList<>();
public Room() {
// 点数和花色
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
String[] colors = {"♠", "♥", "♦", "♣"};
int size = 0; // 用于标示牌的大小
// 组合牌
for (String number : numbers) {
size++;
for (String color : colors) {
Card c = new Card(number, color, size);
allCards.add(c);
}
}
// 添加大小王
Card c1 = new Card("", "小王", ++size);
Card c2 = new Card("", "大王", ++size);
Collections.addAll(allCards, c1, c2);
// 打印所有牌
System.out.println(allCards);
}
public void start() {
// 1. 洗牌
Collections.shuffle(allCards);
System.out.println("洗牌后: " + allCards);
// 2. 发牌
List<Card> linHuChong = new ArrayList<>();
List<Card> jiuMoZhi = new ArrayList<>();
List<Card> renYingYing = new ArrayList<>();
for (int i = 0; i < allCards.size(); i++) {
Card c = allCards.get(i);
if (i % 3 == 0) {
linHuChong.add(c);
} else if (i % 3 == 1) {
jiuMoZhi.add(c);
} else {
renYingYing.add(c);
}
}
sortcards(linHuChong);
sortcards(jiuMoZhi);
sortcards(renYingYing);
// 显示玩家的牌
System.out.println("林胡冲的牌: " + linHuChong);
System.out.println("鸠摩智的牌: " + jiuMoZhi);
System.out.println("任盈盈的牌: " + renYingYing);
List<Card> lastThreeCards = allCards.subList(allCards.size() - 3, allCards.size());
System.out.println("最后三张牌: " + lastThreeCards);
jiuMoZhi.addAll(lastThreeCards);
sortcards(jiuMoZhi);
System.out.println("鸠摩智的牌+最后三张牌: " + jiuMoZhi);
}
private void sortcards(List<Card> cards) {
Collections.sort(cards, new Comparator<Card>() {
@Override
public int compare(Card o1, Card o2) {
return o2.getSize()-o1.getSize();//降序
}
});
}
}
构造器
public class Card {
private String number;
private String color;
private int size;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public Card(String number, String color, int size) {
this.number = number;
this.color = color;
this.size = size;
}
public Card() {
}
@Override
public String toString() {
return color + number;
}
}