黑马程序员技术交流社区
标题: 技术贴 [打印本页]
作者: 沈佳杰 时间: 2019-3-11 21:18
标题: 技术贴
技术贴
一个大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;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |