2 回答

TA貢獻(xiàn)1786條經(jīng)驗 獲得超11個贊
問題在于,當(dāng)您向下轉(zhuǎn)換為 an 時, an可以容納的int最大值是 10 位數(shù)字,因此它無法返回大于該數(shù)字的數(shù)字。int2147483647
所以你需要讓這個領(lǐng)域成為debitCardNumber一個long:
private long debitCardNumber;
將代碼更改為此以獲取 12 位數(shù)字:
long min = (long)Math.pow(10, 11);
long max = (long)Math.pow(10, 12);
long debitCardNumber = ThreadLocalRandom.current().nextLong(min, max);
對于 4 位數(shù)字debitCardPin:
int debitCardPin = ThreadLocalRandom.current().nextInt(1000, 10000);
不需要將數(shù)字轉(zhuǎn)換為long或int顯式地存在一些方法,這些方法將在給定和值的情況下ThreadLocalRandom.current()給出相應(yīng)類型的數(shù)字。使用此方法,您可以放心,您始終會得到介于(包含)和(不包含)之間的值。這將解決您的問題“但有時它會給我一個唯一的 3 位數(shù)隨機(jī)數(shù)。”minmaxminmax

TA貢獻(xiàn)1866條經(jīng)驗 獲得超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);
添加回答
舉報