如何在Java中生成任意长度的任意随机数?例如,要生成一个宽度为3的数字,它应该在100到999之间。那么如何编码呢?
在下图中:
我想解决第二个问题。
这是我为第一个问题写的:
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
。我该怎么办?
答案 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的幂来计算最小值和最大值:
例如,对于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();
迭代器与其他迭代器一样,因此您可以随意使用它。 让我知道这是否不是您想要的。