JAVA 随机产生-100到Integer.MAX_VALUE之间的随机整数

如题,怎么做?

用Random类的nextInt()方法可以产生Integer.MIN_VALUE到Integer.MAX_VALUE之间的随机整数,用nextInt(int n)方法可以产生0到n之间的随机整数,然而我的这个要求实现的时候会产生越界问题,到底怎么做?

((Random.nextInt() + (0 - Integer.MIN_VALUE)) % (Integer.MAX_VALUE + 100)) - 100

可能需要一些强制转换为long的操作,你自己加下,思路就是通过求模产生一个 0~Integer.MAX_VALUE+100 的随机数,再-100

有一个可以产生 -100 到 Integer.MAX_VALUE 之间的整数的方法,由于并不是每个数字出现的概率都相同,所以并不算是随机数,希望能帮到你

 System.out.println(((new Random()).nextLong())%(Integer.MAX_VALUE+100)+Integer.MAX_VALUE);

你说的越界问题是指那一方面的,MAX_VALUE范围内?

((Random.nextInt() + (0 - Integer.MIN_VALUE)) % (Integer.MAX_VALUE + 100)) - 100

如果要实现标题的效果,用这个就行result = random.nextInt(MAX_VALUE+100)-100

楼上的回答我统一说下,你们都涉及到了Integer.MAX_VALUE + 100

这个数必然超过int 界,必须转换为long型,所以像什么

result = random.nextInt(MAX_VALUE+100)-100

这种代码根本通不过,因为nextInt()的参数必须是int型且为正整数,越界之后报错

另外把Integer.MAX_VALUE + 100

*写在外面的,必须转换为long型你们的答案才能成立。

但是如果我把题目改成产生-100到Long.MAX_VALUE

的随机整数,又该怎么办???还有招吗???

 想到一个新的办法
int rnd1 = nextInt(2)
int r = nextInt(MAX/2+50) + (rnd1 == 1 ? MAX/2+50 : 0);
r = r - 100; // r就是你要的

思路,分为2次,第一次生成一个0或者1的随机数
第二次生成你范围的一半。
所以结果肯定还是随机的。

public static void main(String[] args) {
String str2="[Integer.MIN_VALUE,100)";//这个值乘于-1就变成(-100,Integer.MAX.VALUE]
int randomOne = (-1)*((int)(Math.random()*(Integer.MIN_VALUE))+100);//区间(-100,Integer.MAX.VALUE]
int randomTwo = (-1)*((int)(Math.random()*(Integer.MIN_VALUE))+100)-1;//区间[-100,Integer.MAX.VALUE)
System.out.println(randomOne);
System.out.println(randomTwo);
}