用扑克游戏操练List常用方法

线性表

List(线性表)是一个接口,ArrayList(顺序表)和LinkedList(链表)继承了List。

List的常用方法:

方法签名 功能描述
add(E e) 把e这个元素,尾插到线性表中
add(int index,E e) 把e这个元素,插入到index所在位置,同时,index之后的所有元素,必须"逻辑"后移
remove(int index) 删除index这个下标的元素,同时,index之后的所有元素,必须"逻辑"前移
remove(Object o) 删除第一个遇到的o元素(本质上是使用"equals"进行比较)
get(int index) 返回index下标处的元素
set(int index,E e) 用e替换index下标处的元素
size() 元素个数
clear() 清空线性表
isEmpty() 判断是否为一个空的线性表
contains(Object o) 返回线性表中,是否包含o这个对象(本质上使用的是"equals"方法)
indexOf(Object o) 返回线性表中,第一个遇到o这个对象的下标(equals)
lastIndexOf(Object o) 返回线性表中,最后一个遇到o这个对象的下标(equals)
subList(int from,int to) 从线性表中,截取一段线性表下来,[from,to)不会影响原线性表
sort(Comparator cmp) 对线性表进行排序,以传入的比较器进行元素的比较
iterator() 返回迭代器,进行从前向后遍历
listIterator() 效果等同于listInterator(0)
listIterator(int index) 从index位置开始遍历
toArray() List转成数组

ArrayList(顺序表):

方法 解释
ArrayList() 无参构造
ArrayList(Collection<? extends E> c) 利用其它Collection构建ArrayList
ArrayList(int initialCapacity) 指定顺序表初始容量

LinkedList(链表):

方法 解释
LinkedList() 无参构造

不管是List、ArrayList还是LinkedList都涉及到泛型,需要什么类型的线性表就在泛型里填什么就好了,注意基本类型必须全部用包装类。接下来我们来玩会扑克牌。

游戏一:一副扑克牌(只要各花色从1到5的牌)

  1. 洗牌
  2. 给5名玩家,各发两张牌
  3. 依次展示5名玩家手中的牌

分析:

  1. 需要扑克牌类来定义每一张牌
  2. 需要List<扑克牌> 牌组 = new ArrayList<>();
  3. 需要玩家类,玩家类中包含List<扑克牌> 手牌
  4. 将牌组的牌分发给个玩家手中

扑克牌类:

public class Card {
   
    public String suit;//花色
    public int rank;//牌面值

    public Card(String suit,int rank){
   
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    //打印这张牌
    public String toString() {
   
        return String.format("[%s %d]",suit,rank);
    }
}

玩家类:

import java.util.ArrayList;
import java.util.List;

public class Player {
   
    public List<Card> cards = new ArrayList<>();//手牌
    public String name;//玩家姓名

    public Player(String name) {
   
        this.name = name;
    }
}

玩游戏:

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

public class Game {
   
    //制作扑克牌(初始化)
    private static void initializeCards(List<Card> cards){
   
        for(String suit: new String[]{
   "♠","♥","♦","♣"}){
   
            for(int rank = 1;rank <= 5;rank++){
   
                Card card = new Card(suit,rank);
                //把扑克牌放入牌组中
                cards.add(card);
            }
        }
    }

    public static void main(String[] args) {
   
        //5名玩家,用List将其保存起来
        List<Player> playerList = new ArrayList<>();
        playerList.add(new Player("周润发"));
        playerList.add(new Player("刘德华"));
        playerList.add(new Player("周星驰"));
        playerList.add(new Player("高进"));
        playerList.add(new Player("未知用户"));

        //牌组容器
        List<Card> cardList = new ArrayList<>();

        //初始化扑克牌
        initializeCards(cardList);
        System.out.println("初始化好的牌:");
        System.out.println(cardList);

        //洗牌,可以直接调用Collections.shuffle来洗牌
        Collections.shuffle(cardList);</
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值