除零之外的范围内的随机数

时间:2013-10-20 18:32:10

标签: java random

我正在尝试使用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);
       }

我试过这个,但不排除零。任何帮助将不胜感激。

8 个答案:

答案 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);