案例:抢红包
需求:抢红包活动,分别有11,22,33,44,55五个红包,请模拟抽奖,按照先来先得随机抽取,抽完为止,一个红包只能被抽一次,先抽或后抽哪一个红包是随机的
一、代码
方案一:
import java.util.Random;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
int[] moneys = {11,22,33,44,55};
start(moneys);
}
public static void start(int[] moneys){
Scanner sc = new Scanner(System.in);
Random r = new Random();
//定义一个for循环,控制抽奖5次
for(int i = 1; i <= 5 ; i++){
System.out.println("输入任意内容,按下回车进行抽奖");
sc.next(); // 等待用户输入内容,按了回车才往下走
while(true){
int index = r.nextInt(moneys.length);
int money = moneys[index];
//判断红包是否为0
if(money != 0){
System.out.println("恭喜您,抽中" + money);
moneys[index] = 0;
break;
}
}
}
System.out.println("活动结束");
}
}
方案二;
import java.util.Random;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
int[] moneys = {11,22,33,44,55};
start(moneys);
}
public static void start(int[] moneys){
Scanner sc = new Scanner(System.in);
Random r = new Random();
//定义一个for循环,控制抽奖5次
for(int i = 0; i < moneys.length ; i++){
System.out.println("输入任意内容,按下回车进行抽奖");
sc.next(); // 等待用户输入内容,按了回车才往下走
while(true) {
int index = r.nextInt(moneys.length);
if(moneys[index] != 0){
int temp = moneys[i];
moneys[i] = moneys[index];
moneys[index] = temp;
System.out.println("抽中" + moneys[i]);
moneys[i] = 0;
break;
}
}
}
}
}
方案三:
import java.util.Random;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
int[] moneys = {11,22,33,44,55};
sequence(moneys);
start(moneys);
}
public static void start(int[] moneys){
Scanner sc = new Scanner(System.in);
//定义一个for循环,控制抽奖5次
for(int i = 0; i < moneys.length ; i++){
System.out.println("输入任意内容,按下回车进行抽奖");
sc.next(); // 等待用户输入内容,按了回车才往下走
System.out.println("抽中" + moneys[i]);
}
}
//打乱顺序
public static void sequence(int[] moneys){
int[] money = new int[moneys.length];
Random r = new Random();
for(int i = 0 ; i < moneys.length ; i++){
int index = r.nextInt(moneys.length);
int temp = moneys[i];
moneys[i] = moneys[index];
moneys[index] = temp;
}
}
}
二、运行结果
输入任意内容,按下回车进行抽奖
1
恭喜您,抽中55
输入任意内容,按下回车进行抽奖
2
恭喜您,抽中33
输入任意内容,按下回车进行抽奖
3
恭喜您,抽中11
输入任意内容,按下回车进行抽奖
4
恭喜您,抽中44
输入任意内容,按下回车进行抽奖
5
恭喜您,抽中22
活动结束
输入任意内容,按下回车进行抽奖
1
抽中44
输入任意内容,按下回车进行抽奖
2
抽中11
输入任意内容,按下回车进行抽奖
3
抽中55
输入任意内容,按下回车进行抽奖
4
抽中33
输入任意内容,按下回车进行抽奖
5
抽中22
输入任意内容,按下回车进行抽奖
1
抽中22
输入任意内容,按下回车进行抽奖
2
抽中33
输入任意内容,按下回车进行抽奖
3
抽中44
输入任意内容,按下回车进行抽奖
4
抽中11
输入任意内容,按下回车进行抽奖
5
抽中55
总结
方案一:写一个for循环控制抽奖5次,每次抽奖,都从数组中随机找出一个金额,如果该金额不是0,则代表抽中,接着用0替换该位置处的金额,然后继续下一个粉丝的抽奖;如果抽中的金额发现是0,代表该位置处的红包之前被别人抽走,则从新的数组中随机找出一个金额,继续判断,直至抽中的金额不是0为止。
方案二:先把数组里面的5个金额打乱顺序,打乱后的顺序认为是中奖顺序,接着,写个for循环,执行5次,每次都提示抽奖,每次抽奖都是依次取出数组中的每个位置处的金额作为中奖金额即可。