如题,怎么做?
用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);
}