欢迎打开这篇文章
你好! 这是你了解 集合 所展示的欢迎页。如果你想学习如何使用集合, 可以仔细阅读这篇文章,了解一下基本语法知识。
1,案例
** 需求:通过程序实现斗地主过程中的洗牌,发牌和看牌。**
1-1 思路分析
- 1,创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
- 2,往牌盒里塞牌
- 3,洗牌,把牌打散,用collections的shuffle()方法实现
- 4,发牌,也就是遍历集合给三个玩家发牌
- 5,看牌,也就是三个玩家分别遍历自己的牌
2,开始编写代码
2-1 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
//创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
ArrayList<String> array = new ArrayList<String>();
2-2 往牌盒里塞牌
//往牌盒里塞牌
String colors[] = {"♠","♥","♣","♦"}; //花色
String numbers[] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //数字
for (String color:colors){
for (String number:numbers){
array.add(color+number);
}
}
array.add("小王");
array.add("大王");
2-3 洗牌,把牌打散,用collections的shuffle()方法实现
//洗牌,把牌打散,用collections的shuffle()方法实现
Collections.shuffle(array);
2-4 定义三名玩家与底牌集合,还有发牌操作,也就是遍历集合给三个玩家发牌
ArrayList<String> demo1 = new ArrayList<String>();//玩家1
ArrayList<String> demo2 = new ArrayList<String>();//玩家2
ArrayList<String> demo3 = new ArrayList<String>();//玩家3
ArrayList<String> dipai = new ArrayList<String>();//底牌
// 发牌,也就是遍历集合给三个玩家发牌
for (int i = 0;i<array.size();i++){
String pai = array.get(i);//获取牌牌
if (i>array.size()-3){
dipai.add(pai);
}else if(i%3==0){
demo1.add(pai);
}else if (i%3==1){
demo2.add(pai);
}else if(i%3==2){
demo3.add(pai);
}
2-5 看牌,也就是三个玩家分别遍历自己的牌
//看牌,也就是三个玩家分别遍历自己的牌
public static void show(String name,ArrayList<String> array){
System.out.print(name+"牌是:");
for (String arrayList:array){
System.out.print(arrayList+"");
}
System.out.println("");
}
2-6 方法调用执行,查看结果
show("demo1",demo1);
show("demo2",demo2);
show("demo3",demo3);
show("dipai",dipai);
2-7 整体代码
public class demo {
public static void main(String[] args) {
//创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
ArrayList<String> array = new ArrayList<String>();
//往牌盒里塞牌
String colors[] = {"♠","♥","♣","♦"}; //花色
String numbers[] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //数字
for (String color:colors){
for (String number:numbers){
array.add(color+number);
}
}
array.add("小王");
array.add("大王");
//洗牌,把牌打散,用collections的shuffle()方法实现
Collections.shuffle(array);
// System.out.println(array);
ArrayList<String> demo1 = new ArrayList<String>();//玩家1
ArrayList<String> demo2 = new ArrayList<String>();//玩家2
ArrayList<String> demo3 = new ArrayList<String>();//玩家3
ArrayList<String> dipai = new ArrayList<String>();//底牌
// 发牌,也就是遍历集合给三个玩家发牌
for (int i = 0;i<array.size();i++){
String pai = array.get(i);//获取牌牌
if (i>array.size()-3){
dipai.add(pai);
}else if(i%3==0){
demo1.add(pai);
}else if (i%3==1){
demo2.add(pai);
}else if(i%3==2){
demo3.add(pai);
}
}
show("demo1",demo1);
show("demo2",demo2);
show("demo3",demo3);
show("dipai",dipai);
}
//看牌,也就是三个玩家分别遍历自己的牌
public static void show(String name,ArrayList<String> array){
System.out.print(name+"牌是:");
for (String arrayList:array){
System.out.print(arrayList+"");
}
System.out.println("");
}
}
3,进行优化
3-1 创建hashmap,键是编号,值是牌与arrayList存储编号
//创建hashmap,键是编号,值是牌
HashMap<Integer,String> hm = new HashMap<Integer, String>();
//创建arraylist,存储编号
ArrayList<Integer> arrayList = new ArrayList<Integer>();
3-2 定义花色点数
//定义花色
String colors[] = {"♦","♥","♠","♣"};
//定义点数
String numbers[] = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
3-3 从0开始往hashmap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号
//从0开始往hashmap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号
int index = 0;
for (String number:numbers){
for (String color:colors){
hm.put(index,color+number);
arrayList.add(index);
index++;
}
}
hm.put(index,"小王");
arrayList.add(index);
index++;
hm.put(index,"大王");
arrayList.add(index);
3-4 洗牌
//洗牌(洗的编号),用collections的shuffle()方法实现
Collections.shuffle(arrayList);
3-5 发牌 (发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
TreeSet<Integer> demoSet = new TreeSet<Integer>();
TreeSet<Integer> demo1Set = new TreeSet<Integer>();
TreeSet<Integer> demo2Set = new TreeSet<Integer>();
TreeSet<Integer> dpSet = new TreeSet<Integer>();
for (int i = 0; i < arrayList.size(); i++) {
int x = arrayList.get(i);
if (i>=arrayList.size()-3){
dpSet.add(x);
}else if(i%3==0){
demoSet.add(x);
}else if(i%3==1){
demo1Set.add(x);
}else if (i%3==2){
demo2Set.add(x);
}
}
3-6 定义看牌(遍历TreeSet集合,获取编号,到Hashmap集合找到对应的牌)
public static void showPai(String name,TreeSet<Integer> treeSet,HashMap<Integer,String> hashMap){
System.out.print(name+"的牌是:");
for (Integer key:treeSet){
String poker = hashMap.get(key);
System.out.print(poker+"");
}
System.out.println("");
}
3-7 方法调用和执行
showPai("demoSet",demoSet,hm);
showPai("demo1Set",demo1Set,hm);
showPai("demo2Set",demo2Set,hm);
showPai("dpSet",dpSet,hm);
3-8 改进代码如下
package test1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class PokerDemoPlus {
public static void main(String[] args) {
//创建hashmap,键是编号,值是牌
HashMap<Integer,String> hm = new HashMap<Integer, String>();
//创建arraylist,存储编号
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//定义花色
String colors[] = {"♦","♥","♠","♣"};
//定义点数
String numbers[] = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//从0开始往hashmap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号
int index = 0;
for (String number:numbers){
for (String color:colors){
hm.put(index,color+number);
arrayList.add(index);
index++;
}
}
hm.put(index,"小王");
arrayList.add(index);
index++;
hm.put(index,"大王");
arrayList.add(index);
//洗牌(洗的编号),用collections的shuffle()方法实现
Collections.shuffle(arrayList);
//发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
TreeSet<Integer> demoSet = new TreeSet<Integer>();
TreeSet<Integer> demo1Set = new TreeSet<Integer>();
TreeSet<Integer> demo2Set = new TreeSet<Integer>();
TreeSet<Integer> dpSet = new TreeSet<Integer>();
for (int i = 0; i < arrayList.size(); i++) {
int x = arrayList.get(i);
if (i>=arrayList.size()-3){
dpSet.add(x);
}else if(i%3==0){
demoSet.add(x);
}else if(i%3==1){
demo1Set.add(x);
}else if (i%3==2){
demo2Set.add(x);
}
}
showPai("demoSet",demoSet,hm);
showPai("demo1Set",demo1Set,hm);
showPai("demo2Set",demo2Set,hm);
showPai("dpSet",dpSet,hm);
}
//定义看牌(遍历TreeSet集合,获取编号,到Hashmap集合找到对应的牌)
public static void showPai(String name,TreeSet<Integer> treeSet,HashMap<Integer,String> hashMap){
System.out.print(name+"的牌是:");
for (Integer key:treeSet){
String poker = hashMap.get(key);
System.out.print(poker+"");
}
System.out.println("");
}
}
5,总结
好好学好Java基础,冲冲冲