2 回答

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

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);
添加回答
舉報