日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

int 范围_Java学习之随机生成5个(范围1——33)不同数字的思考

發(fā)布時(shí)間:2023/12/4 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 int 范围_Java学习之随机生成5个(范围1——33)不同数字的思考 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

昨天做了一道福彩雙色球的簡(jiǎn)單程序題,一開(kāi)始不懂雙色球的玩法,樓主我從來(lái)不買(mǎi)彩票的,( ╯□╰ )。所以隨機(jī)生成某個(gè)范圍的5個(gè)數(shù)字(數(shù)字可以重復(fù)),那么很簡(jiǎn)單,一個(gè)循環(huán)就可以搞定了,但是那么問(wèn)題來(lái)了,隨機(jī)生成某個(gè)范圍的5個(gè)不同數(shù)字怎么辦呢?

左思右想,百度Google,想到以下幾種思路:

思路1、使用boolean類(lèi)型數(shù)組作為開(kāi)關(guān),代碼如下:

//傳入一個(gè)數(shù)組,隨機(jī)生成1——33范圍不一樣的5個(gè)數(shù)字public static int[] getResult(int[] arr) {int[] a = arr;//定義34個(gè)開(kāi)關(guān)boolean[] bool =new boolean[34];//使用默認(rèn)值falsefor(int i=0;i<arr.length-1;i++) {do {a[i] =(int)(Math.random()*33)+1;}while(bool[a[i]]);//如果開(kāi)關(guān)是打開(kāi)的繼續(xù)執(zhí)行//打開(kāi)對(duì)應(yīng)位置的開(kāi)關(guān)bool[a[i]]=true;}return a;}

思考步驟:

(0)、傳入的int類(lèi)型數(shù)組用來(lái)保存這生成的不同的5個(gè)數(shù)字

(1)、定義一個(gè)boolean類(lèi)型的數(shù)組,長(zhǎng)度為比生成數(shù)字范圍大1,因?yàn)樗饕龔?開(kāi)始,而生成的數(shù)字是1開(kāi)始,引用類(lèi)型對(duì)象不初始化的話(huà),屬性使用默認(rèn)值,所以boolean類(lèi)型數(shù)組的每個(gè)索引對(duì)應(yīng)位置的默認(rèn)值為false。

(2)、使用for循環(huán),從int類(lèi)型數(shù)組的索引0開(kāi)始,循環(huán)5次,一次給數(shù)值的每個(gè)索引所對(duì)應(yīng)的位置賦值。

(3)、for循環(huán)里面,會(huì)先執(zhí)行一次do....while循環(huán),先執(zhí)行一次,再判斷條件,條件為boolean類(lèi)型數(shù)組的索引為do....while循環(huán)執(zhí)行一次生成的那個(gè)隨機(jī)數(shù),第一次的時(shí)候條件為false肯定是不會(huì)再執(zhí)行的。

(4)、這里是重點(diǎn),bool[a[i]]=true;它的意思是打開(kāi)boolean類(lèi)型數(shù)組對(duì)應(yīng)生成的數(shù)字為索引的那個(gè)位置的開(kāi)關(guān),fasle變?yōu)椤鷗rue,這樣我們下一次執(zhí)行for循環(huán),執(zhí)行do......while語(yǔ)句的時(shí)候,如果生成的數(shù)字和前面第一次的一樣的話(huà),那么while條件會(huì)為true,則繼續(xù)執(zhí)行do....while,直到生成的數(shù)字不一樣,然后賦值給int類(lèi)型的數(shù)組,然后出了do.....while循環(huán),再將剛才生成的那個(gè)數(shù)字對(duì)應(yīng)的boolean類(lèi)型數(shù)組的索引所對(duì)應(yīng)的值變?yōu)閠rue,也就是打開(kāi)開(kāi)關(guān),避免下一次生成重復(fù)的數(shù)字。

(5)如此,便解決了數(shù)字不同的問(wèn)題。

思路2:使用Set集合,因?yàn)镾et集合是不允許放入相同的對(duì)象的

// 使用Set集合public static int[] getResult1(int[] a) {// 定義一個(gè)數(shù)組放入Set集合中取出來(lái)的數(shù)字int[] newArr = a;Integer[] arr1= new Integer[5];Set<Integer> set = new HashSet<Integer>();while (true) {set.add((int) ((33) * Math.random() + 1));if(set.size()==5) {break;}}for(Integer a:set) {System.out.print(a+"t");}System.out.println();//Object[] ob=set.toArray();Integer[] m=set.toArray(new Integer[5]);for(int i=0;i<m.length;i++) {newArr[i]=m[i];//自動(dòng)拆箱}return newArr;}

思路:定義一個(gè)Set集合,定義一個(gè)while循環(huán),一直往Set集合添加生成的隨機(jī)數(shù),因?yàn)镾et是不允許重復(fù)的,所以你添加重復(fù)的是添加不進(jìn)去的,當(dāng)集合的size等于5的時(shí)候就結(jié)束while循環(huán),再將集合轉(zhuǎn)換成數(shù)組,因?yàn)榧现兄荒芊乓妙?lèi)型對(duì)象,所以這里的Integer賦值給int類(lèi)型實(shí)際上會(huì)自動(dòng)拆箱。

總結(jié):條條大路通羅馬,方法也是多種多樣,一題可以有多種解法,當(dāng)然,這道題還有其他解法,以后再補(bǔ)充吧,雖然不難,但是要經(jīng)常思考鴨。

總結(jié)

以上是生活随笔為你收集整理的int 范围_Java学习之随机生成5个(范围1——33)不同数字的思考的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。