package 专题练习;
import java.util.Random;
public class grab_red_packet {
/* 需求:
直播抽奖,分别由{2,588,888,1000,10000}五个奖金,请用代码模拟抽奖,奖项出现顺序要随机且不重复
打印效果:
588元的奖金被抽出*/
//思路:
//1. 先用数组把奖金定义好
//2. 用random方法给出随机数索引
//3. 题目告诉长度为5. 随机数范围就是0-4
//4. 难点:不能重复, 那就想办法不让随机数重复就好了
//总结而言:其实就是一个循环嵌套,外循环来控制输入随机数,内循环来控制是否重复
public static void main(String[] args) {
//定义奖金数组
int[] jiangjin = new int[]{2, 588, 888, 1000, 10000};
//定义奖金已经出现数组
int[] jiangjinhavebeen = new int[jiangjin.length];
//直接调用 答案解出
Restart(jiangjinhavebeen,jiangjin);
}
//抽取随机数的方法
public static int Get_suijishu(int[] jiangjin){
//就是随机生成一个数字
Random r = new Random();
int suijishu = r.nextInt(jiangjin.length);
return suijishu;
}
//判断重复 重复返回-1 没重复返回1 (内循环)
public static int Pan_duan_chongfu(int[] havebeenjiangjin,int []jiangjin,int suijishu){
for (int j = 0; j < havebeenjiangjin.length; j++) {
if(havebeenjiangjin[j] == jiangjin[suijishu]) {
return -1;
}
}
return 1;
}
//外循环 (重复抽取随机数)
public static void Restart(int[] jiangjinhavebeen,int[] jiangjin){
for (int i = 0; i < jiangjinhavebeen.length; ) {
//先外循环(实现随机数),后内循环(判断是否有重复,如果有重复,外循环次数-1,如果不重复,在外循环读出)
//实现随机数(调用生成随机数方法)
int suijishu = Get_suijishu(jiangjin);
//调用 (判断是否重复方法)
if(Pan_duan_chongfu(jiangjinhavebeen,jiangjin,suijishu) == 1){
jiangjinhavebeen[i] = jiangjin[suijishu];//如果没有重复,就把当前的已经抽出来的奖金录入到(已经出现过的奖金)的数组里面去
System.out.println(jiangjinhavebeen[i] + "元的奖金被抽出");
}
else{
System.out.println("随机数为:" + suijishu + "的奖品已经被抽出,请重新抽取");
i++; //如果重复,那么外循环的次数就不能增加,应该保持原次数(这里i--,循环条件里由i++,两者相加i刚好还是等于i)
}
}
}
//其实这个题目也可以这样理解,就是把原数组打乱(用随机数)最后输出,个人觉得不如上面的代码给到用户信息及时和明确
public static void mode_two(int[] jiangjin){
for (int i = 0; i < jiangjin.length; i++) {
int suijishu = Get_suijishu(jiangjin); //获取随机数
int temp = jiangjin[i];
jiangjin[i] = jiangjin[suijishu];
jiangjin[suijishu] = temp;
} //这样就打乱顺序了, 这样的算法也让博主很受启发.
//遍历
for (int i = 0; i < jiangjin.length; i++) {
System.out.print(jiangjin[i]);
}
}
}
java专题练习(抢红包)
不会,就是不会!2023-09-21 16:01
相关推荐
挖掘狂人3 分钟前
同一个端口能不能被两个程序同时监听?codigger7 分钟前
同一个端口能不能被两个程序同时监听?西索斯coding7 分钟前
qwen3.8-max-0902 和 minimax-m3 改真实仓库差多少?2026 年 50 个缺陷复现实测框架2501_9339232515 分钟前
SpringCloud:OpenFeign快速实现晚风予卿云月18 分钟前
【C++高并发内存池】 2.ThreadCache设计denlaku23 分钟前
JDK 26 新特性详解SL_staff27 分钟前
3分钟完成业务规则调整:告别代码修改,实现拖拽式逻辑配置Flynn Liang32 分钟前
让 AI 查订单、查库存、发消息:Spring AI 自定义工具(Tool)实战与工具描述工程Rain的Java大神之路40 分钟前
我,13年Java老兵,建了个免费网站,公开叫板“Java已死”:没有广告,没有付费墙,151个页面全是踩坑干货萧瑟余晖42 分钟前
Spring Integration企业集成概览详解