Java语言-36:集合的功能应用举例

用游戏斗地主的玩法来体现各集合的功能:

package Powker;


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


/*需求:斗地主的装牌,洗牌,发牌,看牌
 * 分析:1)装牌
 * 创建集合容器,向集合中添加牌
 * 牌的属性:A-K的大小
 * 颜色:♠,♥,♣,♦
 * 大小王
 * 2)洗牌:随机打乱集合元素Collections.shuffer();
 * 3)发牌:
 * 三个人玩,加三张底牌。创建四个集合容器,存储着四个对象
 * 4)看牌
 * 遍历出三个玩家的集合元素,并可选择是否显示底牌,在此选择显示
 * 开始写了
 *
 *
 * 
 * */
public class Powker_1 {


public static void main(String[] args) {
// 创建集合容器(牌盒)
ArrayList<String> list = new ArrayList<String>();


// 装牌
// 创建花色数组
String[] colors = { "♠", "♥", "♣", "♦" };
// 创建点数数组
String[] numbers = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
// 定义牌的颜色和点数并将牌加入到集合中
for (String color : colors) {
for (String number : numbers) {
String powker = color.concat(number);
// 将powker加入到集合元素中
list.add(powker);
/*
* 输出看一下 System.out.print(powker+"--");
* 没问题,继续向下♠A--♠2--♠3--♠4--♠5--♠6--♠7--♠8--♠9--♠10--♠J--♠Q--♠K--
* ♥A--♥2此时未打乱集合
*/
}
}
// 添加大小王
list.add("大王");
list.add("小王");


// 洗牌
Collections.shuffle(list);
/*
* 输出看一下 System.out.println(list); 输出的部分结果:没问题,继续[♣2, ♦A, ♠J, ♠7, ♦2,
* ♦3, ♥8, ♦6, ♠8, ♦Q, ♥Q, ♥10
*/


// 发牌:创建四个集合,存储三个玩家和一个底牌的的容器
ArrayList<String> player1 = new ArrayList<String>();
ArrayList<String> player2 = new ArrayList<String>();
ArrayList<String> player3 = new ArrayList<String>();
ArrayList<String> dipai = new ArrayList<String>();


// for循环遍历
for (int x = 0; x < list.size(); x++) {
// 判断把牌发给谁
if (x >= list.size() - 3) {
dipai.add(list.get(x));
} else if (x % 3 == 0) {
player1.add(list.get(x));
} else if (x % 3 == 1) {
player2.add(list.get(x));
} else if (x % 3 == 2) {
player3.add(list.get(x));
}
}


// 看牌(将看牌对象封装成一个整体)
LookPowker("玩家一", player1);
LookPowker("玩家二", player2);
LookPowker("玩家三", player3);
LookPowker("底牌", dipai);


}


private static void LookPowker(String name, ArrayList<String> list) {
System.out.print(name + "的牌是:");
// 遍历输出
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
/*
* 输出: 玩家一的牌是:♣Q ♦A ♠7 ♣9 大王 ♦4 ♥2 ♣5 ♦6 ♦8 ♣A ♠9 ♠6 ♦5 ♦7 ♥3 ♣K
* 玩家二的牌是:♦2 ♠K ♥7 ♦Q ♦J ♥9 ♠Q ♦K ♣6 ♥Q ♣3 ♣7 ♣8 ♥K ♥4 ♠A ♥6 玩家三的牌是:♠4
* ♣10 ♠10 ♥5 ♦3 ♥A ♦10 ♣J ♣4 小王 ♥10 ♠J ♦9 ♠3 ♠8 ♠2 ♠5 底牌的牌是:♥8 ♣2 ♥J
* 该方法没有对牌进行排序,需要改进。按点数的大小从小到大对牌进行排序,加入HashMap集合对牌进行排序

*/


}


}


排序版:

        package Powker;


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;


/* 需求:按点数的大小从小到大对牌进行排序,加入HashMap集合和TreeSet集合对牌进行排序
 * 分析:在装牌阶段创建两个集合,ArrayList集合和HashMap集合。
 * HashMap集合的功能是键值对,从0开始编号,将编号和编号对应的牌都存储到HashMap集合中,同时往ArrayList单独存储编号 
 * 洗牌 :洗的是编号 
 * 开始编码实现
 * */
public class Powker_2 {
public static void main(String[] args) {


// 创建两个集合容器(牌盒)
HashMap<Integer, String> map = new HashMap<Integer, String>();
ArrayList<Integer> arr = new ArrayList<Integer>();


// 装牌
// 创建花色数组
String[] colors = { "♠", "♥", "♣", "♦" };
// 创建点数数组
String[] numbers = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
// 从0开始将编号和编号对应的牌都存储到HashMap集合中,同时往ArrayList单独存储编号
int index = 0;
// 进行拼接
for (String number : numbers) {
for (String color : colors) {
String poker = color.concat(number);
map.put(index, poker);
arr.add(index);
index++;
}
}
// 装小王和大王
map.put(index, "小王");
arr.add(index);
index++;
map.put(index, "大王");
arr.add(index);


// 洗牌
Collections.shuffle(arr);


// 发牌(创建TreeSet集合),三个玩家一个底牌
TreeSet<Integer> player1 = new TreeSet<Integer>();
TreeSet<Integer> player2 = new TreeSet<Integer>();
TreeSet<Integer> player3 = new TreeSet<Integer>();
TreeSet<Integer> dipai = new TreeSet<Integer>();
// 将牌发给玩家和底牌
// for循环遍历
for (int x = 0; x < arr.size(); x++) {
// 判断把牌发给谁
if (x >= arr.size() - 3) {
dipai.add(arr.get(x));
} else if (x % 3 == 0) {
player1.add(arr.get(x));
} else if (x % 3 == 1) {
player2.add(arr.get(x));
} else if (x % 3 == 2) {
player3.add(arr.get(x));
}


}


// 看牌
LookPowker("玩家一", player1, map);
LookPowker("玩家二", player2, map);
LookPowker("玩家三", player3, map);
LookPowker("底牌", dipai, map);


}


private static void LookPowker(String name, TreeSet<Integer> set, HashMap<Integer, String> map) {
System.out.print(name + "的牌是:");
// 遍历TreeSet集合获取到每一个编号
for (Integer Key : set) {
// 获取到编号,通过编号找牌(HashMap中找)
String Value = map.get(Key);
// 输出Value
System.out.print(Value + " ");


}
System.out.println();
/*
* 输出: 玩家一的牌是:♠2 ♦2 ♠3 ♥3 ♦3 ♣4 ♥5 ♥6 ♦6 ♠7 ♣7 ♦7 ♠8 ♦J ♥Q 小王 大王
* 玩家二的牌是:♥A ♦A ♠4 ♥4 ♦4 ♠5 ♦5 ♠6 ♥8 ♣8 ♦8 ♣9 ♦9 ♥J ♣Q ♦Q ♣K 玩家三的牌是:♠A
* ♣A ♣3 ♣5 ♣6 ♥7 ♠9 ♥9 ♠10 ♥10 ♣10 ♦10 ♠J ♣J ♠Q ♠K ♥K 底牌的牌是:♥2 ♣2 ♦K
* 利用该方法可实现按照从小到大进行排序


*/
}
}

猜你喜欢

转载自blog.csdn.net/qq_41833394/article/details/80324382