Java使用HashMap映射实现消费抽奖功能

本文实例为大家分享了Java实现消费抽奖功能的具体代码,供大家参考,具体内容如下

要求如下:

1、定义奖项类Awards,包含成员变量String类型的name(奖项名称)和int类型的count(奖项数量)。

2、定义抽奖类DrawReward,包含成员变量Map<Integer, Awards> 类型的rwdPool(奖池对象)。该类实现功能如下:a) 构造方法中对奖池对象初始化,本实验要求提供不少于4类奖品,每类奖品数量为有限个,每类奖品对应唯一的键值索引(抽奖号)。b) 实现抽奖方法draward,由抽奖号在奖池中抽奖,并根据当前奖池的情况作出对应的逻辑处理;c) 利用迭代器Iterator实现显示奖池奖项情况的方法showPool。

3、编写测试类,实现下图效果:

实现代码:

import java.util.Random;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

class Awards {
    private String name;
    private int count;

    public Awards() {
    }

    public Awards(String name, int count) {
        this.name = name;
        this.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}

class DrawReward {
    private Map<Integer,Awards> rwdPool=null;

    public DrawReward(){
        this.rwdPool=new HashMap<Integer,Awards>();
        rwdPool.put(0,new Awards("阳光普照奖:家庭大礼包",100));
        rwdPool.put(1,new Awards("一等奖:华为Mate X",4));
        rwdPool.put(2,new Awards("二等奖:格力吸尘器",6));
        rwdPool.put(3,new Awards("特等奖:¥5000",1));
    }

    public boolean hasAward(int rdkey){
        Awards awards = this.rwdPool.get(rdkey);
        if(awards.getCount()==0) return false;
        else return true;
    }

    public void draward(int rdKey) {
        Awards aw = this.rwdPool.get(rdKey);
        System.out.println("抽奖结果:"+aw.getName());
        aw.setCount(aw.getCount()-1);
    }

    public void showPool(){
        Iterator<Awards> it;
        it = rwdPool.values().iterator();
        while(it.hasNext()){
            Awards aw = it.next();
            System.out.println(aw.getName()+";剩余奖项数量:"+aw.getCount());
        }
    }
}

public class MainClass {
    public static void main(String[] args) {
        DrawReward draw = new DrawReward();
        for(int i=0;i<10;i++){
            Random rd = new Random();
            int rdKey = rd.nextInt(4);
            if(draw.hasAward(rdKey)) {
                draw.draward(rdKey);
            } else {
                i--;
            }
        }

        draw.showPool();
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java集合之Map接口的实现类精解

    目录 HashMap类 1.HashMap类概述 2.HashMap的存储结构(底层实现原理) 3.HashMap源码中的重要常量 LinkedHashMap类 TreeMap类 1.TreeMap类概述 2.自然排序 3.定制排序 Hashtable类 Properties类 HashMap类 1.HashMap类概述 HashMap是 Map 接口使用频率最高的实现类,允许使用null键和null值,与HashSet一样,不保证映射的顺序. 所有的key构成的集合是Set:无序的.不可重复的

  • Java那点儿事之Map集合不为人知的秘密有哪些

    目录 前言 一.Map 二.HashMap的基本概念 三.HashMap集合的基本方法与使用 四.HashMap集合的遍历 五.HashMap集合的综合案例 六.总结 前言 上期我们说到了Collection集合,他是单列的集合,分为List集合和Set集合,今天我将继续分析一个双列集合也就是Map,为什么叫他双列集合呢? 往下看,你就知道了. 一.Map Map集合的特点 - 键值对映射关系 - 一个键对应一个值 - 键不能重复,值可以重复 - 元素存取无序 我们通过他的一个实现类HashMa

  • java面试散列表及树所对应容器类及HashMap冲突解决全面分析

    目录 性能分析 HashMap 产生冲突原因及解决方法 HashMap 解决冲突方法 jdk7 与 jdk8 中HashMap的区别 发生冲突 扩容 使用建议 散列表 Hashmap.hashtable.concurrentHashMap.hashset: 树: treemap.treeset.hashset treeset 继承自 treemap,hashset 继承自 hashmap : 性能分析 Map 是 Java 中的接口,Map.Entry 是 Map 的一个内部接口 Map 提供了

  • 深入浅出讲解Java集合之Map接口

    目录 一.Map接口继承树 二.Map接口中的常用方法 三.源码分析 1. HashMap的底层实现原理? 2.LinkedHashMap的底层实现原理(了解) 四.Collections工具类 一.Map接口继承树 Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x) A.HashMap:作为Map的主要实现类:线程不安全的,效率高:存储null的key和value a.LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历. 原因

  • java编程进阶小白也能手写HashMap代码

    目录 什么是HashMap HashCode和数组 Hash碰撞 toString方法 百万级数据压测 步骤 1 来100w条数据,看看要花多久? 步骤 2 设计思路 步骤 3 添加一个size 步骤 4 先设计,后实现 步骤 5 扩容方法 步骤 6 reHash方法 步骤 7 新的问题出现 步骤 8 indexForTable方法 步骤 9 重新转测 步骤 10 再次测试100w数据 步骤 11 PK 原生JDK8的HashMap 补丁 步骤 1 put元素的bug 步骤 2 HashMap为

  • Java之map的常见用法讲解与五种循环遍历实例代码理解

    目录 一.概述: 二.Map集合的功能介绍 三.map官方总结 四.实例 五.循环遍历的五种方法 一.概述: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 二.Map集合的功能介绍 a:添加功能 V put(K key,V val

  • Java使用HashMap映射实现消费抽奖功能

    本文实例为大家分享了Java实现消费抽奖功能的具体代码,供大家参考,具体内容如下 要求如下: 1.定义奖项类Awards,包含成员变量String类型的name(奖项名称)和int类型的count(奖项数量). 2.定义抽奖类DrawReward,包含成员变量Map<Integer, Awards> 类型的rwdPool(奖池对象).该类实现功能如下:a) 构造方法中对奖池对象初始化,本实验要求提供不少于4类奖品,每类奖品数量为有限个,每类奖品对应唯一的键值索引(抽奖号).b) 实现抽奖方法d

  • JAVA实现用户抽奖功能(附完整代码)

    需求分析 1)实现三个基本功能:登录.注册.抽奖. 2)登录:用户输入账号密码进行登录,输入账号后会匹配已注册的用户,若输入用户不存在则退出,密码有三次输入机会,登录成功后主界面会显示已登录用户的账号信息. 3)注册:用户首先输入账号名称,系统查询此名称是否存在,如存在则请求用户换一个名称,否则进入密码输入,密码要求6位数字字符串,注册成功后,系统随机分配一个与已有用户不重复的四位数字id编号. 4)抽奖:功能实现前提:需有用户处于登录状态.该前提满足时,系统从已存在用户中随机抽取5位不同的用户

  • Java实现按比抽奖功能

    需求是要做几个小游戏的抽奖功能,需要根据不同的游戏有不同的抽奖规则,其中也有很多共性,可归纳为只按奖品占比抽取.奖品占比与奖品数量抽取.分段抽取,为方便起见将这些的抽奖的规则统一封装到了工具类中.抽奖的核心逻辑使用的叫做离散算法实现的. 一.概述 使用离散算法即根据奖品占比进行分段,然后再产生随机数匹配所对应的区间. 首先定义Prize奖品实体类,类中有prizeName(奖品名称).prizeWeight(奖品比重).prizeCount(奖品数量)属性,下面是核心的代码: /** * 按比例

  • Java实现抽奖功能

    本文实例为大家分享了Java实现抽奖功能的具体代码,供大家参考,具体内容如下 1 概述 项目开发中经常会有抽奖这样的营销活动的需求,例如:积分大转盘.刮刮乐.老虎机等等多种形式,其实后台的实现方法是一样的,本文介绍一种常用的抽奖实现方法. 整个抽奖过程包括以下几个方面: 奖品 奖品池 抽奖算法 奖品限制 奖品发放 2 奖品 奖品包括奖品.奖品概率和限制.奖品记录. 奖品表: CREATE TABLE `points_luck_draw_prize` ( `id` bigint(20) NOT N

  • Java实现简单抽奖功能界面

    本文实例为大家分享了Java实现简单抽奖功能的具体代码,供大家参考,具体内容如下 要求:定义文本框添加姓名,将姓名存储并且在界面中可见,点击抽奖按钮进行抽奖并输出最后的中奖得主. 关于抽奖当然需要用到随机数的生成函数,在Java中Random 的使用合适比较简单的: 有两种不同的Random方法的使用,其中一种是Math中的random. 该方法生成的是0-1之间的浮点数,如果要生成整数类型的数字,可以乘一个整数,强制转换为整数类型. int n = (int)(Math.random()*x)

  • java实现抽奖功能解析

    本文实例为大家分享了java实现抽奖功能的具体代码,供大家参考,具体内容如下 抽一个: 输入抽奖人数,生成随机数字进行抽奖. 比如:楼主抽幸运儿送游戏,选择前100楼抽取一个幸运儿. import java.util.Random; import java.util.Scanner; public class Gift { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.ou

  • java实现幸运抽奖功能

    本文实例为大家分享了java实现幸运抽奖功能的具体代码,供大家参考,具体内容如下 本系统较为简单,未使用是什么多的算法,也未添加保存文件读取文件功能, 1.任务 模拟注册登录幸运抽奖全过程 2.主要功能: 1.注册2.登录3.退出登录4.抽奖5.退出系统 首页: 1.输出菜单2.选择菜单编号3.如果编号选择错误,输出“您的输入有误!” 注册: 1.输入用户名和密码,系统产生4位随机数作为卡号.2.注册成功,输出用户信息 登录: 1.输入注册时的用户名和密码,登录成功,系统提示登陆成功.2.如果用

  • Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解

    本文实例讲述了Java 8 Stream 的终极技巧--Collectors 功能与操作方法.分享给大家供大家参考,具体如下: 1. 前言 昨天在 Collection移除元素操作 相关的文章中提到了 Collectors .相信很多同学对这个比较感兴趣,那我们今天就来研究一下 Collectors . 2. Collectors 的作用 Collectors 是 Java 8 加入的操作类,位于 java.util.stream 包下.它会根据不同的策略将元素收集归纳起来,比如最简单常用的是将

  • Java操作FTP实现上传下载功能

    目录 FTP简介 FTP架构 FTP数据连接模式 用户认证 客户端 Vsftp安装与配置 启动服务 配置文件说明 传输模式配置 系统用户配置 java操作ftp文件服务器 1.引入依赖 2.提供接口 3.对提供操作ftp接口进行实现 4.配置ftp相关参数 5.写测试controller FTP简介 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层,TCP 模型的第四层, 即应用层, 使用 TCP 传输而

  • Java中HashMap和TreeMap的区别深入理解

    首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的). HashMap 非线程安全 TreeMap 非线程安全 线程安全 在Java里,线程安全一般体

随机推荐