A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

沈佳杰

初级黑马

  • 黑马币:21

  • 帖子:6

  • 精华:0

© 沈佳杰 初级黑马   /  2019-3-11 21:18  /  683 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

技术贴
一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出
这是我觉得难度很大的一题,我自己花了很多时间来理解这个题目,现在来说一下这个题目的思路:
1.     奖项要随机出现,但奖金不是连续的数字,不能被随机产生。能随机产生的只有数组的索引了,可以使用随机索引来代表随机元素。因为索引和元素是一一对应的,
2.     哪些奖被抽过了,哪些奖没有被抽过,要定义一个数组来存放已经被抽过的奖项。
3.      每个奖项只能被抽出一次,要写一个方法来控制奖项不重复。
开始其实我自己不知道从哪里入手,完全懵逼的状态,后来开始看了答案也不能理解,就默默的看了一天…
解决方法:
使用数组存放多个奖金,再使用另一个数组存放已经被抽过的奖金,使用方法来判断某个奖金是否已经被抽取过。
操作步骤
1.     定义奖金的数组arr。
2.     定义数组brr准备存放已经被抽过的奖金,两个数组长度相同。
3.     定义一个变量index,用户代表数组brr的索引。
4.     定义方法,判断数组中是否存在某数字,存在返回true,不存在返回false。
5.     写一个while循环,如果index<arr.length则说明奖项没有被抽完继续抽取。
6.     在循环中使用随机数产生一个随机索引i。
7.     使用步骤4的方法判断brr数组中是否包含arr奖金。
8.      如果不包含,则打印arr奖金,并且把它放入brr数组中代表已经被抽取过,同时index加一
public class Demo8 {
    public static voidmain(String[] args) {
        //1.定义存放奖金的数组
        int[] arr ={10000,1000,588,888,2};
        //2.定义数组存放已经被取过的奖金
        int[] brr = newint[5];
        //3.定义变量表示brr的索引
        int index = 0;
        //4.创建随机数对象
        Random r = newRandom();
        //5.定义循环反复获取随机数,如果index小于arr的长度则继续循环
        while(index <arr.length){
            //5.1每次生成一个随机索引对应一个奖金
            int i =r.nextInt(arr.length);
            //5.2调用方法判断这个奖金是否被获取过
            boolean b =exist(brr, arr);
            //5.3b是false代表这个奖金没有被抽取过
            if(!b) {
                //5.4把获取之后的奖金存放到brr中
                brr[index]= arr;
                //5.5index索引向后移动一次
                index++;
                //5.6打印本次被抽出的奖项
               System.out.println( arr + "元的奖金被抽出");
            }
        }
    }
    //6.定义方法:判断brr数组中是否存在num这个数字
    public static booleanexist(int[] brr,int num){
        //6.1对数组进行遍历
        for (int i = 0; i< brr.length; i++) {
            //6.2判断如果找到数字,则返回true
            if(brr ==num){
                returntrue;
            }
        }
        //6.3如果最终没有找到则返回false
        return false;
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马