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

Java 中的 BankApplication 程序,setDebitCard()功能问题。

在这里,我无法在每次java 运行变量后生成唯一的随机数debitCardNumber,而它与debitCardPin.

nextDouble(),Math.random()我也尝试使用 Random class method ThreadLocalRandom.current().nextDouble()..

问题:

  1. debitCardNumber尝试上述所有操作后,输出是相同的。(没有任何语法错误)

  2. 另外,我得到的是相同的 10 位数字,debitCardNumber而不是 12 位数字。

  3. 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() code


private 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));

    }

预期结果:

  1. debitCardNumber每次JAVA RUN后应返回一个唯一的随机 12 位整数

  2. debitCardPin应该只返回 4 位整数。

实际结果:

  1. debitCardNumber每次JAVA RUN后返回相同的 10 位整数

  2. debitCardPin有时返回一个 3 位唯一随机整数。


ibeautiful
浏览 89回答 2
2回答

Qyouu

问题在于,当您向下转换为 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 位数随机数。”minmaxminmax

心有法竹

问题是 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java