好玩的撲克發牌器 Collections.sort()的妙用
阿新 • • 發佈:2020-12-13
import java.util.ArrayList;
import java.util.Collections;
public class DouDiZhuDemo {
public static void main(String[] args) {
//準備牌
String[] flowers = {"♠", "♥", "♣", "♦"};
String[] numbers = {"3", "4" , "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
//組合
ArrayList<String> box = new ArrayList<>();
for (String flower : flowers) {
for (String number : numbers) {
String poke = flower + number;
box.add(poke);
}
}
box.add("joker");
box.add("JOKER");
box.add("賴子");
//System.out.println("box = " + box);
//洗牌 Collections工具類中 傻否 shuffle
Collections.shuffle(box);
//發牌
//準備四個牌搭子
ArrayList<String> 地主牌 = new ArrayList<>();
ArrayList<String> 周潤發 = new ArrayList<>();
ArrayList<String> 周星馳 = new ArrayList<>();
ArrayList<String> 劉德華 = new ArrayList<>();
//率先發四張地主牌
地主牌.add(box.get(box.size() - 1));
地主牌.add(box.get(box.size() - 2));
地主牌.add(box.get(box.size() - 3));
地主牌.add(box.get(box.size() - 4));
for (int i = 0; i < box.size() - 4; i++) {
if (i % 3 == 0) {
周潤發.add(box.get(i));
}
if (i % 3 == 1) {
周星馳.add(box.get(i));
}
if (i % 3 == 2) {
劉德華.add(box.get(i));
}
}
//排序類 OrderDemo
OrderDemo od = new OrderDemo();
//排序
Collections.sort(周潤發, od);
Collections.sort(周星馳, od);
Collections.sort(劉德華, od);
Collections.sort(地主牌, od);
//看牌
System.out.println("周潤發 = " + 周潤發);
System.out.println("周星馳 = " + 周星馳);
System.out.println("劉德華 = " + 劉德華);
System.out.println("地主牌 = " + 地主牌);
}
}
import java.util.Comparator;
import java.util.List;
public class OrderDemo implements Comparator<String> {
//3,4,5,6,7,8,9,1,J,Q,K,A,2,o,O,子
//偷樑換柱
//快速新增集合元素的方法 List介面下有 靜態of方法,但是這種方法建立的集合物件不可變
List<String> order = List.of("3", "4", "5", "6", "7", "8", "9", "1", "J", "Q", "K", "A", "2", "o", "O", "子");
//o1 和 o2 代表的是牌 ♣3 ♥K
@Override
public int compare(String o1, String o2) {
//獲取字串中第二個字元
char c1 = o1.charAt(1);
char c2 = o2.charAt(1);
//在序列集合中找到這個字元對應的索引位置
int i1 = order.indexOf(c1 + "");
int i2 = order.indexOf(c2 + "");
return i1 - i2;
}
}