我正在尝试使用java.util.Random
创建一个随机数生成器。我需要生成介于-5和+5之间的数字,不包括零。这是我的一个实验室的bouncingbox应用程序。随机数是盒子速度的方向。
Random v = new Random();
int deltaX = -5 + v.nextInt(10) ;
for(; deltaX>0 && deltaX<0;){
System.out.println(deltaX);
}
我试过这个,但不排除零。任何帮助将不胜感激。
答案 0 :(得分:4)
这是一种方式:
int deltaX = -5 + v.nextInt(10);
if (deltaX >= 0) deltaX++;
答案 1 :(得分:4)
另一种方式:
int[] outcomeSet = {-5, -4, -3, -2, -1, 1, 2, 3, 4, 5};
int deltaX = outcomeSet[v.nextInt(10)];
如果将outcomeSet
设为静态,则这应该是计算效率最高的。
答案 2 :(得分:3)
每次随机无重生的一种可能解决方案是使用以下算法:
public int getRandomWithExclusion(Random rnd, int start, int end, int... exclude) {
int random = start + rnd.nextInt(end - start + 1 - exclude.length);
for (int ex : exclude) {
if (random < ex) {
break;
}
random++;
}
return random;
}
可以使用数组引用调用以下内容:
int[] ex = { 2, 5, 6 };
val = getRandomWithExclusion(rnd, 1, 10, ex)
或直接将号码插入电话:
val = getRandomWithExclusion(rnd, 1, 10, 2, 5, 6)
它会在开始和结束(包括两者)之间生成一个随机数(int),并且不会为您提供数组排除中包含的任何数字。所有其他数字的概率相等。请注意,必须遵守以下约束:排除按升序排序,所有数字都在提供的范围内,并且所有数字都相互不同。
答案 3 :(得分:2)
我喜欢在范围[-5,4]中随机的其他答案,如果值为0或更大,则他们将1添加为实际范围[-5; -1] [1; 5]
。
但这里有一些更简单的方法,但不会更短。
Random v = new Random();
boolean makeNegative = v.nextBoolean();
int value = v.nextInt(5) + 1; // range [1; 5]
if (makeNegative)
value = -value;
效果较差,因为它需要两个随机值(boolean和int),但代码更容易阅读。
答案 4 :(得分:1)
您可以尝试这样: -
int deltaX = -5 + v.nextInt(10);
if (deltax >= 0) deltax++;
答案 5 :(得分:1)
do {
deltaX = -5 + v.nextInt(11);
} while (deltaX == 0)
最简单的方法,仍然是随机的(没有+1)。
答案 6 :(得分:1)
你也可以这样做:
Random random = new Random();
int random = random.nextInt(5) + 1;
int result = random.nextBoolean() ? random : -random;
是的,效果较差,因为它需要两个随机值。得到的间隔是[-5-0]和[1-5]
答案 7 :(得分:-1)
这不是解决此问题的最佳方法,但它会这样做:
int deltaX = 0;
while(deltaX = 0) {
deltaX = -5 + v.nextInt(10);
}
System.out.println(deltaX);