Map集合实例练习四--简单实战斗地主

集合嵌套

集合嵌套并不是一个新的知识点,仅仅是集合内容又是集合,如单列集合嵌套、双列集合与单列集合嵌套、双列集合嵌套。

单列集合嵌套:

大学(List表示)有多个分校(list表示),每个分校有多个班级(字符串)。

双列集合与单列集合嵌套

大学(Map表示,key:分校名称、value:分校集合)

有多个分校(List表示)

每个分校有多个班级(字符串)。

双列集合嵌套

大学(Map表示,key:分校名称、value:分校集合)

有多个分校(Map表示,key:班级名称、value 班级对象)

每个分校有多个班级(自定义班级类MyClass)。

如Collection集合嵌套、Collection集合与Map集合相互嵌套、Map集合嵌套。

  • ArrayList嵌套 ArrayList

ArrayList< ArrayList<String> >

Collection< ArrayList<Integer> >

  • Map嵌套 ArrayList

HashMap<String, ArrayList<Person>>

ArrayList< HashMap<String, String>>

  • Map集合嵌套

HashMap<String, HashMap<String,String>>

HashMap<String, HashMap<Person,String>>

模拟斗地主洗牌发牌

5.1 案例介绍

按照斗地主的规则,完成洗牌发牌的动作。

 

 

具体规则:

1. 组装54张扑克牌

2. 将54张牌顺序打乱

3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

  • 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

具体代码逻辑如下:这是ArrayList集合的一个很好的接近实际意义的练习实战。对于新手来说,可能确实有点难,

但这只是最基础的练习。如果真想在这个行业干下去,请加强这些基础的练习。这些仅仅只是基础,在实际开发中,比这更难,

只有先从最基础的最基本的做起,实际开发,其实很多都是由这些最基础的知识去完成的。只是也相对的加了一些逻辑业务。

但不管怎么样,还是这句话,基础是关键,加油!不放弃,不抛弃!相信自己,你可以的。人生的酸甜苦辣,哪位成功的人士没有经历过呢?谁没有点这些风风雨雨的经历,只有经历这些大风大浪,才有可能成功。对自己说:come on!!!!!!!!!!!!

package cn.arrays;

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

/*要修改java文件编码,由GBK修改为UTF-8,
因为默认的字符编码GBK没有我们要的梅花、方片、黑桃、红桃(♠♥♦♣)等特殊字符。*/
public class Porker {
	public static void main(String[] args) {
		// 准备花色,创建ArrayList集合
		ArrayList<String> color = new ArrayList<String>();
		// 添加红 黑 梅花 方块 四种元素
		color.add("♠");
		color.add("♥");
		color.add("♦");
		color.add("♣");
		// 准备数字,创建arrayList对象
		ArrayList<String> number = new ArrayList<String>();
		// Collections工具
		Collections.addAll(number, "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2");
		// 定义一个map集合:用来将数字与每一张牌进行对应
		HashMap<Integer, String> map = new HashMap<Integer, String>();
		int index = 0;
		// 加入大小王
		map.put(index++, "小☺");
		map.put(index++, "大☻");
		// 对这些数字进行遍历,arrayList的嵌套遍历
		for (String thisNumber : number) {
			// 对颜色进行遍历
			for (String thisColor : color) {
				// 添加到map集合对象中
				map.put(index++, thisColor + thisNumber);
			}
		}
		// 这样一副牌就准备好了,输出这副牌,可以查看下
		System.out.println(map);
		// 一副54张的牌 ArrayList里边为0-53的数的新牌
		ArrayList<Integer> cards = new ArrayList<Integer>();
		for (int i = 0; i <= 53; i++) {
			cards.add(i);
		}
		// 控制台查看这53个数字
		// System.out.println(cards);
		// 洗牌,自然排序,即随机排序的
		Collections.shuffle(cards);
		System.out.println(cards);
		// 创建三个玩家和底牌
		ArrayList<Integer> iPlayer = new ArrayList<Integer>();
		ArrayList<Integer> iPlayer2 = new ArrayList<Integer>();
		ArrayList<Integer> iPlayer3 = new ArrayList<Integer>();
		ArrayList<Integer> itCards = new ArrayList<Integer>();
		// 遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中
		for (int i = 0; i < cards.size(); i++) {
			// 如果i大于等于51
			if (i >= 51) {
				// 将其中的三张加入到底牌中
				itCards.add(cards.get(i));
			} else {
				// 否则这51张牌平分给三位玩家
				if (i % 3 == 0) {
					// 玩家一获得的牌
					iPlayer.add(cards.get(i));
				} else if (i % 3 == 1) {
					// 玩家二获得的牌
					iPlayer2.add(cards.get(i));
				} else {
					// 玩家三获得的牌
					iPlayer3.add(cards.get(i));
				}
			}
		}
		// 对每个人手中的牌排序,随机排序
		Collections.sort(iPlayer);
		Collections.sort(iPlayer2);
		Collections.sort(iPlayer3);

		// 对应数字形式的每个人手中的牌,定义字符串形式的牌
		ArrayList<String> sPlayer = new ArrayList<String>();
		ArrayList<String> sPlayer2 = new ArrayList<String>();
		ArrayList<String> sPlayer3 = new ArrayList<String>();
		ArrayList<String> sCards = new ArrayList<String>();
		// 对三位玩家的牌进行遍历
		for (Integer key : iPlayer) {
			sPlayer.add(map.get(key));
		}
		for (Integer key : iPlayer2) {
			sPlayer2.add(map.get(key));
		}
		for (Integer key : iPlayer3) {
			sPlayer3.add(map.get(key));
		}
		// 对底牌进行遍历
		for (Integer key : itCards) {
			sCards.add(map.get(key));
		}
		// 最终: 看牌,各玩家查看自己的牌
		System.out.println("玩家一的牌" + sPlayer); //
		System.out.println("玩家二的牌" + sPlayer2);
		System.out.println("玩家三的牌" + sPlayer3);
		System.out.println("底牌" + sCards);
	}
}

 

掌握Arrays类的常用方法;

题目:

1) 定义类,定义main()方法,按以下要求编写代码:

  • 定义int数组,初始化为:{235,676,90,3,43,65,52,34,36,,776,9,86}

  • 调用Arrays类的相关方法对数组进行升序排序;

  • 调用Arrays类的查找方法,在数组中查找元素:776,并打印查找结果;

  • 调用Arrays类的toString()方法打印这个int数组

 

6.1.2 冒泡排序选择排序二分查找的程序实现

 

6.1.3 简述什么是Map集合,最常用的操作有哪些

 

6.1.4 参照集合体系图,说出所有常用集合及常用集合的相关方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值