JAVA隨機(jī)數(shù)隨機(jī)字母的實(shí)現(xiàn)(微信搶紅包小練習(xí))
今天我們談一談JAVA中的隨機(jī)數(shù)
隨機(jī)數(shù) ——Math.random()
0.0 在Math類中存在一個(gè)random()
方法,用于產(chǎn)生隨機(jī)數(shù)字,這個(gè)方法生成在0.0<=生成數(shù)<1.0
0.1那么它默認(rèn)的生成的數(shù)顯然在有些時(shí)候是滿足不了我們的,我們來看看它的升級(jí)版
類型 | 返回值 |
---|---|
(int)(Math.Random()*n) | 0<=返回值<n |
m+(int)(Math.Random()*n) | m<=返回值<m+n |
隨機(jī)數(shù) ——字母
0.2 使用Math類的random()
方法也可以隨機(jī)生成字符,(a----z)
(char)('a'+Math.random()*('z'-'a'-1));
0.3 A-Z與a-z的寫法是不一樣的(char)(cha1+Math.random*(char2-cha1+1));
隨機(jī)數(shù) ——Random
0.4 除了Math 類,JAVA中還有Random
可以創(chuàng)建數(shù)組。
Random c = mew Random; Random c = new Random(seedValue);
c : Random類對(duì)象;
seedValue : 隨機(jī)數(shù)生成的種子;
0.6 下面是幾個(gè)常用的方法
類型 | 返回值 |
---|---|
public int nextInt | 返回一個(gè)隨機(jī)整數(shù) |
public int nextInt(int n) | 0<=返回值<0 |
public long nextLong() | 返回一個(gè)隨機(jī)長整型數(shù) |
public boolean nextBoolean() | 返回一個(gè)隨機(jī)布爾型值 |
public float nextFloat() | 返回一個(gè)浮點(diǎn)型 |
public doublle nextDouble() | 返回一個(gè)雙精度值 |
微信搶紅包
我想大家一定在微信里搶過紅包或者發(fā)過紅包,今天我們就帶領(lǐng)大家用JAVA制作一個(gè)微信的小程序。
1.0 我們先創(chuàng)建一個(gè)控制掃描器,輸入顯示發(fā)出的金額與紅包個(gè)數(shù)
System.out.println("--------微信搶紅包---------"); Scanner sc = new Scanner (System.in); System.out.println("金額¥"); double total = sc.nextDouble(); System.out.println("發(fā)出紅包個(gè)數(shù)"); int num = sc.nextInt();
1.1 我們的紅包在散發(fā)出去的時(shí)候是不會(huì)出現(xiàn) 0¥ 所以我們先確定他的最小值并創(chuàng)建隨機(jī)數(shù)。
Random c = new Random(); double min = 0.01;
1.2 隨后我們用一個(gè) for 循環(huán)來循環(huán)發(fā)放我們的紅包;
for(int i=1;i<=num;i++)
1.3 我們所搶的紅包并不是平均發(fā)放的,它有最大值最小值,所以我們要?jiǎng)?chuàng)建一個(gè)最大值和最小值
我們的最大值如果等于我們紅包錢數(shù)總數(shù),那我們的其他的紅包豈不就是沒有錢了,所以,我們需要一個(gè)公式,
最大金額 =可分配金額 - (紅包個(gè)數(shù) - 已發(fā)出的紅包數(shù))*紅包最小金額 double max = total - (num - i)* min;
1.4 我們并不是將所有的錢放到紅包里所以我們再定義一下紅包的范圍
double range = max - min;//
1.5 現(xiàn)在我們開始計(jì)算應(yīng)該放多少錢了,這一步有一點(diǎn)點(diǎn)繞。
double money = c.nextInt(range);
但我們在編譯器里我們會(huì)發(fā)現(xiàn)報(bào)錯(cuò)了
這是因?yàn)?code>nextInt()他的返回值(參數(shù))是一個(gè)整型值,而我們的range
與money
他們都是 double 值,這樣當(dāng)然會(huì)報(bào)錯(cuò)了。
那我們怎么改呢?
例如我們的range
是23.56這是一個(gè)double值,我們將range*100
23.56*100=2356,隨后我們再將它強(qiáng)制轉(zhuǎn)換成整數(shù)
double money = c.nextInt((int)range*100);
但我們最終的結(jié)果為2356¥,顯然這是將我們的紅包是在無形中放大了100倍,這樣誰還會(huì)愿意發(fā)紅包呢?咋解決,很簡單我們之前 23.56*100 我們再除上100是不是就右變回去了,最后啊我們再返回一個(gè)double值就可以了
double money = (double)c.nextInt((int)range*100)/100;
這樣我們就在range
的范圍里獲取了隨機(jī)的金額。
1.6 我們之前說了nextInt()
這個(gè)方法它有一個(gè)弊端,它的返回值范圍是0<=返回值<0,也就是說我們的紅包還會(huì)出現(xiàn)0¥。
為了防止0¥的出現(xiàn),我們定義一個(gè) finalMoney
double finalMoney = money + min;
這才是我們最后的金額
1.7 上面是我們第一個(gè)紅包所發(fā)出的金額,那我們的第2第3第num個(gè)紅包的金額是多少呢?
total = total - finalMoney;
現(xiàn)在的total
才是我們下一個(gè)紅包的 可分配金額。
隨后我們輸出
System.out.println("第"+i+"個(gè)紅包金額"+String.format("%.2f",finalMoney)+"¥");
(%.2f意思是保留兩位小數(shù))
最后啊我們將掃描器關(guān)掉
sc.close();
1.8 來我們試一下
這就是我們的微信搶紅包的游戲。
1.9完整代碼:
public static void main(String[] args) { System.out.println("--------微信搶紅包---------"); Scanner sc = new Scanner (System.in); System.out.println("金額¥"); double total = sc.nextDouble(); System.out.println("發(fā)出紅包個(gè)數(shù)"); int num = sc.nextInt(); double min = 0.01;//紅包最小金額 Random c = new Random();//創(chuàng)建隨機(jī)數(shù) for(int i=1;i<=num;i++) { /* * 最大金額 =可分配金額 - (紅包個(gè)數(shù) - 已發(fā)出的紅包數(shù))*紅包最小金額 */ double max = total - (num - i)* min; double range = max - min;// double money = (double)c.nextInt((int)(range*100))/100; double finalMoney = money + min; total = total - finalMoney; System.out.println("第"+i+"個(gè)紅包金額"+String.format("%.2f",finalMoney)+"¥"); }//保留兩位小數(shù) sc.close(); }
當(dāng)你現(xiàn)在還是19或20歲的少年,你會(huì)覺得一個(gè)人的生命其實(shí)很漫長,但當(dāng)你看到那些年邁的老人時(shí),你會(huì)覺得我也有這樣的一天,一個(gè)人的生命其實(shí)也非常短暫,我們通過媒體了解32歲猝然離世功夫巨星李小龍,但他的一生充滿了傳奇,在凌晨我們的手機(jī)幾乎在同一時(shí)間給我們傳來了噩耗,曼巴離我們而去,但他的一生充滿了熱愛,還有我們的吹哨人,在疫情期間那些英年早逝的英雄們,他們的一生充滿了正能量與奉獻(xiàn)。回過去想想,你是否還是從前那個(gè)少年,是否沒有一絲絲改變————
到此這篇關(guān)于JAVA隨機(jī)數(shù)隨機(jī)字母的實(shí)現(xiàn)(微信搶紅包小練習(xí))的文章就介紹到這了,更多相關(guān)JAVA隨機(jī)數(shù)隨機(jī)字母內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中使用RediSearch實(shí)現(xiàn)高效的數(shù)據(jù)檢索功能
RediSearch是一款構(gòu)建在Redis上的搜索引擎,它為Redis數(shù)據(jù)庫提供了全文搜索、排序、過濾和聚合等高級(jí)查詢功能,本文將介紹如何在Java應(yīng)用中集成并使用RediSearch,以實(shí)現(xiàn)高效的數(shù)據(jù)檢索功能,感興趣的朋友跟著小編一起來看看吧2024-05-05數(shù)組在java中的擴(kuò)容的實(shí)例方法
在本篇文章里小編給大家分享的是一篇關(guān)于數(shù)組在java中的擴(kuò)容的實(shí)例方法內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01Springboot與vue實(shí)現(xiàn)文件導(dǎo)入方法具體介紹
文件導(dǎo)入時(shí)大多數(shù)項(xiàng)目無法回避的問題,這兩天深入學(xué)習(xí)了文件導(dǎo)入,在這里進(jìn)行記錄,使用到的技術(shù)是Springboot+Vue,前端組件使用el-upload2023-02-02MyBatis-Plus中如何使用ResultMap的方法示例
本文主要介紹了MyBatis-Plus中如何使用ResultMap,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Java中高效判斷數(shù)組中是否包含某個(gè)元素的幾種方法
這是一個(gè)在Java中經(jīng)常用到的并且非常有用的操作,這個(gè)問題在Stack Overflow中也是一個(gè)非常熱門的問題,本文將分析幾種常見用法及其時(shí)間成本2021-09-09Java復(fù)制一個(gè)對(duì)象并且不想復(fù)制其中的空值屬性問題
這篇文章主要介紹了Java復(fù)制一個(gè)對(duì)象并且不想復(fù)制其中的空值屬性問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08java高并發(fā)下CopyOnWriteArrayList替代ArrayList
這篇文章主要為大家介紹了java高并發(fā)下CopyOnWriteArrayList替代ArrayList的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12