Java抽签小程序(可控制抽几个人)(利用随机数与数组想结合)
拿宿舍抽簽來舉例子(宿舍抽簽出人去干活,6人間)
直接先上代碼,再解釋
第一步 ; 決定抽幾個(gè)人并創(chuàng)建數(shù)組
利用Scanner從鍵盤錄入要抽取的人數(shù)x(本例子為6),并創(chuàng)建有x個(gè)元素的數(shù)組
System.out.println("請(qǐng)輸入你要抽取的人數(shù)");Scanner scanner=new Scanner(System.in);int x=scanner.nextInt();int[]a=new int[x];第二步 ;引入key與randomNum
為了生成不重復(fù)的隨機(jī)數(shù),除了引入隨機(jī)數(shù)以外我們用一個(gè)key來當(dāng)作一個(gè)衡量。
int randomNum = 0;int key=0;第三步 ;生成不重復(fù)的隨機(jī)數(shù)
for (int i = 0; i < a.length; i++) {randomNum=(int)(Math.random()*x+1);//生成x個(gè)隨機(jī)數(shù)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;}在這里對(duì)第三步第二行的這里的+1給出一個(gè)解釋。
randomNum=(int)(Math.random()*x+1);Math.random()返回一個(gè)double類型的0.0-1.0之間的數(shù)值,包括0,不包括1,這個(gè)數(shù)值*100,那范圍不就是0-100(不包括)了么。強(qiáng)轉(zhuǎn)之后范圍就是0-99,為了達(dá)到我們手動(dòng)選擇生成幾個(gè)隨機(jī)數(shù)的目的,讓其+1.
總之一句話解釋就是由于強(qiáng)轉(zhuǎn)的原因,范圍縮小了1,現(xiàn)在給它補(bǔ)回來。
進(jìn)入正文解釋
首先根據(jù)注釋得知,先生成x(6)個(gè)隨機(jī)數(shù)。
randomNum=(int)(Math.random()*x+1);//生成x個(gè)隨機(jī)數(shù)其次,當(dāng)i==0時(shí),記錄下此時(shí)的隨機(jī)數(shù)并放入數(shù)組a中成為下表為0的數(shù)組中的第一個(gè)元素a[i]=randomNum
(a[0]=第一個(gè)隨機(jī)數(shù))
然后使用continue結(jié)束語句使for循環(huán)后面的內(nèi)容正常進(jìn)行。
若a[1]=randomNum(與a[0]重復(fù)了),則使key=1,并使i–,key=0(再循環(huán)一次),
若a[1]與a[0]不同,則將其放入數(shù)組中稱為下標(biāo)為1的數(shù)組中的第二給元素。
總之著兩句話的意思用一句話解釋就是
在將隨機(jī)數(shù)放入數(shù)組前進(jìn)行一個(gè)判斷
若是數(shù)組里的數(shù)與新生成的數(shù)有重復(fù)則再生成一次隨機(jī)數(shù),若是無重復(fù)則
將其錄入數(shù)組中,直到錄完并形成你所需要的數(shù)組。
我已經(jīng)盡力寫的詳細(xì)了,我覺得有時(shí)候真的是人的懶推動(dòng)了技術(shù)的進(jìn)步(手動(dòng)滑稽)
總結(jié)
以上是生活随笔為你收集整理的Java抽签小程序(可控制抽几个人)(利用随机数与数组想结合)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【GPS】 根据GPS坐标求取两点间距
- 下一篇: java 检索ldap,从LDAP(Ja