生成包含与数字n相同的数字的随机数

时间:2018-04-06 09:50:01

标签: java random

我必须创建一个包含特定范围内随机数的数组,但每个数字必须包含与数字n(用户输入)相同的数字。也可以复制数字。例如n = 11452所以生成的数字可以是221545.每个下一个数字必须包含1,4,5,2(在这种情况下,n是11452)我只需要一个解决这个问题的想法。

2 个答案:

答案 0 :(得分:0)

1)确定用户输入中的不同数字的数量(在您的示例中为4:1,2,4,5) 2)创建一个至少这个数字的随机数(在你的例子中:至少1000)
3)在找到的号码的随机位置插入请求的数字。确保这些位置不同。即,确保没有请求的数字被另一个数字覆盖。

这有意义吗?

答案 1 :(得分:0)

1)将用户输入的数字解析为String,并将所有数字添加到Set

2)将您的集转换为数组以访问数组的随机索引。

3)通过随机索引访问转换后数组中的已解析数字。

也许,这不是一个完美的实现,但以下方法将生成一个随机数字,符合您的要求,据我了解。生成的随机数字的长度与用户输入的数字一样长。

只需修改它即可创建一个数组,其中包含生成的随机数作为您的要求。

public int generate(String number) throws NumberFormatException {
    // 1) parse number and add the digits to a set
    HashSet<Integer> digits = new HashSet<>();
    for (String digitStr : number.split("")) {
        int digit = Integer.parseInt(digitStr);
        digits.add(digit);
    }
    // 2) convert the set to array to access via random index
    Integer[] digitArray = new Integer[number.length()];
    digits.toArray(digitArray);

    String generated = "";
    Random random = new Random();
    for (int i=0; i < number.length(); i++) {
        // 3) grap a random digit from array and append it to your result
        int randomIndex = Math.abs(random.nextInt()) % number.length();
        generated += digitArray[randomIndex];
    }

    return Integer.parseInt(generated);
}