Java抽签小程序(可控制抽几个人)(利用随机数与数组想结合)

本文深入解析了一种基于Java的抽签算法实现,通过具体示例(宿舍抽签)展示了如何生成不重复的随机数,并将这些随机数与具体人物关联,确保抽签过程公平公正。文章详细解释了算法步骤,包括决定抽签人数、生成随机数、检查重复以及最终的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拿宿舍抽签来举例子(宿舍抽签出人去干活,6人间)
直接先上代码,再解释

package Shuai;

import java.util.Random;
import java.util.Scanner;

public class 抽签需改善 {
public static void main(String[]args) {
	System.out.println("请输入你要抽取的人数");
	Scanner scanner=new Scanner(System.in);
	int x=scanner.nextInt();
	int[]a=new int[x];
	int randomNum = 0;
	int key=0;
	for (int i = 0; i < a.length; i++) {
		randomNum=(int)(Math.random()*x+1);
		if(i==0) {
			randomNum=a[i];
			continue;
		}
		for (int j = 0; j <= i; j++) {
			if(a[j]==randomNum) {
				key=1;
			}
		}
		if(key==0) {
			a[i]=randomNum ;
		}else {
			i--;
			key=0;
			continue;
		}
	}for (int c = 0; c < a.length; c++) {
		if(a[c]==0) {
		System.out.println("张超");}
		if(a[c]==1) {
			System.out.println("晋子健");}
		if(a[c]==2) {
			System.out.println("邵金河");}
		if(a[c]==3) {
			System.out.println("刘洋");}
		if(a[c]==4) {
			System.out.println("路金熙");}
		if(a[c]==5) {
			System.out.println("李先凯");}
	}
}
}

第一步 ; 决定抽几个人并创建数组

利用Scanner从键盘录入要抽取的人数x(本例子为6),并创建有x个元素的数组

System.out.println("请输入你要抽取的人数");
	Scanner scanner=new Scanner(System.in);
	int x=scanner.nextInt();
	int[]a=new int[x];

第二步 ;引入key与randomNum

为了生成不重复的随机数,除了引入随机数以外我们用一个key来当作一个衡量。

int randomNum = 0;
	int key=0;

第三步 ;生成不重复的随机数

	for (int i = 0; i < a.length; i++) {
		randomNum=(int)(Math.random()*x+1);//生成x个随机数
		if(i==0) {
			randomNum=a[i];
			continue;
		}
		for (int j = 0; j <= i; j++) {
			if(a[j]==randomNum) {
				key=1;
			}
		}
		if(key==0) {
			a[i]=randomNum ;
		}else {
			i--;
			key=0;
			continue;
		}
在这里对第三步第二行的这里的+1给出一个解释。
randomNum=(int)(Math.random()*x+1);

Math.random()返回一个double类型的0.0-1.0之间的数值,包括0,不包括1,这个数值*100,那范围不就是0-100(不包括)了么。强转之后范围就是0-99,为了达到我们手动选择生成几个随机数的目的,让其+1.
总之一句话解释就是由于强转的原因,范围缩小了1,现在给它补回来。

进入正文解释

首先根据注释得知,先生成x(6)个随机数。

randomNum=(int)(Math.random()*x+1);//生成x个随机数

其次,当i==0时,记录下此时的随机数并放入数组a中成为下表为0的数组中的第一个元素a[i]=randomNum
(a[0]=第一个随机数)
然后使用continue结束语句使for循环后面的内容正常进行。

for (int j = 0; j <= i; j++) {
			if(a[j]==randomNum) {
				key=1;
			}
		}
		if(key==0) {
			a[i]=randomNum ;
		}else {
			i--;
			key=0;
			continue;
		}

若a[1]=randomNum(与a[0]重复了),则使key=1,并使i–,key=0(再循环一次),
若a[1]与a[0]不同,则将其放入数组中称为下标为1的数组中的第二给元素。

总之着两句话的意思用一句话解释就是

在将随机数放入数组前进行一个判断
若是数组里的数与新生成的数有重复则再生成一次随机数,若是无重复则
将其录入数组中,直到录完并形成你所需要的数组。

我已经尽力写的详细了,我觉得有时候真的是人的懒推动了技术的进步(手动滑稽)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晋子健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值