亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Math.random() 和 ThreadLocalRandom.current()

使用 Math.random() 和 ThreadLocalRandom.current()

ibeautiful 2023-06-21 13:31:25
Java 中的 BankApplication 程序,setDebitCard()功能問題。在這里,我無法在每次java 運行變量后生成唯一的隨機數debitCardNumber,而它與debitCardPin.nextDouble(),Math.random()我也嘗試使用 Random class method ThreadLocalRandom.current().nextDouble()..問題:debitCardNumber嘗試上述所有操作后,輸出是相同的。(沒有任何語法錯誤)另外,我得到的是相同的 10 位數字,debitCardNumber而不是 12 位數字。debitCardPin工作正常,但有時它會給我一個唯一的 3 位隨機數。代碼package bankAccountApp;import java.util.Random;import java.util.concurrent.ThreadLocalRandom;public class Current extends Account {    private int debitCardNumber;    private int debitCardPin;    Random rand = new Random();//setDebitCard() codeprivate void setDebitCard(){    debitCardNumber = (int)(ThreadLocalRandom.current().nextDouble()*Math.pow(10,12));/* Also tried using   debitCardNumber = (int)(rand.nextDouble()*Math.pow(10,12));   debitCardNumber = (int)(Math.random()*Math.pow(10,12));*/    debitCardPin = (int)(Math.random()*Math.pow(10,4));    }預期結果:debitCardNumber每次JAVA RUN后應返回一個唯一的隨機 12 位整數debitCardPin應該只返回 4 位整數。實際結果:debitCardNumber每次JAVA RUN后返回相同的 10 位整數debitCardPin有時返回一個 3 位唯一隨機整數。
查看完整描述

2 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

問題在于,當您向下轉換為 an 時, an可以容納的int最大值是 10 位數字,因此它無法返回大于該數字的數字。int2147483647


所以你需要讓這個領域成為debitCardNumber一個long:


private long debitCardNumber;

將代碼更改為此以獲取 12 位數字:


long min = (long)Math.pow(10, 11);

long max = (long)Math.pow(10, 12);

long debitCardNumber = ThreadLocalRandom.current().nextLong(min,  max);

對于 4 位數字debitCardPin:


int debitCardPin = ThreadLocalRandom.current().nextInt(1000, 10000);

不需要將數字轉換為long或int顯式地存在一些方法,這些方法將在給定和值的情況下ThreadLocalRandom.current()給出相應類型的數字。使用此方法,您可以放心,您始終會得到介于(包含)和(不包含)之間的值。這將解決您的問題“但有時它會給我一個唯一的 3 位數隨機數?!眒inmaxminmax


查看完整回答
反對 回復 2023-06-21
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

問題是 int。它太小了(你這里有溢出)。


您可以嘗試以下代碼:


double rndValue = (ThreadLocalRandom.current().nextDouble() * Math.pow(10, 12));

DecimalFormat formatter = new DecimalFormat("##");

formatter.setRoundingMode(RoundingMode.DOWN);

String result = formatter.format(rndValue);

System.out.println(result);


查看完整回答
反對 回復 2023-06-21
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號