在Java中生成任意长度的任何随机数

时间:2018-10-26 05:04:46

标签: java

如何在Java中生成任意长度的任意随机数?例如,要生成一个宽度为3的数字,它应该在100到999之间。那么如何编码呢?​​
在下图中:
description
我想解决第二个问题。
这是我为第一个问题写的:

public int getRandomNumberReturntypediff(int min,int max) {
    Random rand = new Random();

    int  n = rand.nextInt(1000) + 1;
    Integer.toString(n);

    System.out.println("get Random Number with return type STRING" + n);
    return n;
}

假设我采用参数length并返回String。我该怎么办?

7 个答案:

答案 0 :(得分:2)

我们使用String来创建号码并将其转换为BigInteger。我认为处理大量数字的最佳方法是使用BigInteger,但是如果需要String,只需返回即可。

static List<Character> NUMBERS_WITHOUT_ZERO = List.of('1', '2', '3', '4', '5', '6', '7', '8', '9');
static List<Character> NUMBERS_WITH_ZERO = List.of('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
private static final SecureRandom random = new SecureRandom();

public static BigInteger randomNumber(int length) {
    StringBuilder res = new StringBuilder(length);
    res.append(NUMBERS_WITHOUT_ZERO.get(random.nextInt(NUMBERS_WITHOUT_ZERO.size())));
    for (int i = 2; i <= length; i++)
        res.append(NUMBERS_WITH_ZERO.get(random.nextInt(NUMBERS_WITH_ZERO.size())));
    return new BigInteger(res.toString());
}

我希望这就是你想要的。

答案 1 :(得分:1)

我认为这应该可行:

int n = min + (int) (Math.random() * (max - min + 1));

答案 2 :(得分:1)

由于您已经在问题中有了实际的有界随机数生成逻辑,因此我假设您正在努力计算边界。

您可以使用10的幂来计算最小值和最大值:

  • 最小= 10 ^(长度-1)
  • 最大=(10 ^长度)-1

例如,对于3的数字长度,这将为您提供最小100和最大999的数字。

这是一个完整的例子:

import java.util.Random;

public class Randoms {
    public static void main(String args[]) {
        System.out.println(generateRandom(3));
    }

    private static String generateRandom(int length) {
        int min = (int) Math.pow(10, length - 1);
        int max = (int) Math.pow(10, length); // bound is exclusive

        Random random = new Random();

        return Integer.toString(random.nextInt(max - min) + min);
    }
}

答案 3 :(得分:1)

public void generateRandomNumber(int length){
     int max= Math.pow(10,length)-1;
     int min=Math.pow(10,length-1);
     int range = max - min + 1;
     int randomNumber = (int) (Math.random() * range) + min;
}     

Math.random()返回大于等于0.0但小于1.0的值

答案 4 :(得分:1)

您需要此方法,

public static int getRandNum(int min, int max) {
    return (int)(Math.random()*(max-min)) + min;
}

就像您在图片中的要求一样,该方法返回介于min(含)和max(不含)之间的随机数。

答案 5 :(得分:0)

我的变体

 public class RandomGen {

    public int getRandom(int min, int max) {
    Random random = new Random();
    return random.nextInt((max - min) + 1) + min;
     }
   }

    public class App {
      public static void main(String[] args) {
      RandomGen value = new RandomGen();
      System.out.println(value.getRandom(300, 400));
     }
    }

答案 6 :(得分:0)

如果我理解这还不确定是否仍然有用,那么该解决方案将以Java的形式提供。

Random sr = new SecureRandom();
IntStream ints = sr.ints(3, 100, 999);
Iterator<Integer> it = ints.boxed().collect(Collectors.toSet()).iterator();

迭代器与其他迭代器一样,因此您可以随意使用它。 让我知道这是否不是您想要的。