一、认识顺序表和线性表
线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
线性表在逻辑上是一种线性的结构,线性表在物理的存储时,通常以数组和链式结构形式存储
二、背景介绍
生成一副54张的扑克牌,有三名玩家,会在扑克牌抽取15张牌,再按照顺序依次给三名玩家发牌,每名玩家会拿到5张牌,最终会将抽取到的15张牌,和三名玩家的手牌,打印显示在控制台中。
知识点:循环结构 顺序表 方法
三、解决思路
编写一个card类和一个PokerGame类,给予Card花色和大小的属性,将card存入顺序表中,抽牌之前利用随机数编写函数对牌进行乱序,将三位玩家也作为元素存入链表中,最后通过循环输出三位玩家的手牌。
四、代码解析
1.Card类
package List;
public class Card {
public String suit;//花色
public String rank;//牌面大小
public Card(String suit,String rank)
{
this.suit=suit;
this.rank=rank;
}
@Override
public String toString(){
return "("+this.suit+this.rank+")";//重载了打印函数
}
}
2.PokerGame类
package List;
import java.util.*;
public class PokerGame {
public static final String[] suits={
"♥","♠","♣","♦"};//创建一个含有四种花色的数组
private static List<Card> buyPoker(){
ArrayList<Card> poker=new ArrayList<>();//新建一个顺序表,表中的内容需要是Card对象
for(int i=0;i<4;i++){
//外循环对应四种花色
for(int j=2;j<10;j++){
//内循环对应数字2-8
poker.add(new Card(suits[i],""+j));
}
poker.add(new Card(suits[i],"J"));
poker.add(new Card(suits[i],"Q"));
poker.add(new Card(suits[i],"K"));
poker.add(new Card(suits[i],"A"));//四种特殊的数字
}
poker.add(new Card("","big joker"));
poker.add(new Card("","small joker"));//添加大小王
return poker;//返回的是一个顺序表
}
private static void shuffle(List<Card> poker)
{
Random random=new Random();
for(int i=poker.size()-1;i>0;i--)
{
int pos=random.nextInt(i);//生成0-i之间的一个随机数
swap(poker,i,pos);
}
}
private static void swap(List<Card> poker,int i,int j)
{
Card tmp=poker.get(i);//调取poker中的第i个card赋给temp
poker.set(i,poker.get(j));
poker.set(j,tmp);//进行顺序的调换
}
public static void main(String[] args){
List<Card> poker=buyPoker();//1.创建一副扑克牌
Collections.shuffle(poker);//2.洗牌
System.out.println(poker);
List<List<Card>> players=new ArrayList<>();//新建一个ArrayList,中放置的是,List<Card>
players.add(new ArrayList<>());
players.add(new ArrayList<>());
players.add(new ArrayList<>());//放置三名玩家至新的List中
for(int i=0;i<5;i++)
{
for(int j=0;j<3;j++)
{
Card top=poker.remove(0);//从牌堆中取牌,也就是取poker中的第一个Card
List<Card> player=players.get(j);
player.add(top);
}
}
//4.展示最终拿到的手牌
for(int i=0;i<players.size();i++)
{
List<Card> player=players.get(i);
System.out.println("玩家"+i+"的手牌是:"+player);
}
}
}
4.程序中含有的部分方法解释
java Random.nextInt()方法 lic int nextInt(int n)
该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
元素类型 get(int index);
/**
* 用新的元素 e 替换 index 位置的元素,并返回 index 位置的原来的元素
* index 的可选范围是 0 <= index < size()
* @参数 index 待替换元素的位置(下标)
* @参数 e 要替换的新元素
* @返回值 index 位置的老元素
*/
元素类型 set(int index, 元素类型 e);
/**
* 通过遍历的方式,判断与元素 e 相等(equals)的元素是否存在于线性表中
* @参数 e 待查找元素
* @返回 true:包含;false:不包含
*/
5.运行截图