有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java随机数,范围不包括零

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

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


共 (2) 个答案

  1. # 1 楼答案

    一种可能的解决方案是每次不重新生成随机变量,即使用以下算法:

    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),并且不提供数组中包含的任何数字。所有其他数字都以相同的概率出现。请注意,以下约束必须成立:exclude按升序排序,所有数字都在提供的范围内,并且所有数字都是相互不同的

  2. # 2 楼答案

    这里有一个方法:

    int deltaX = -5 + v.nextInt(10);
    if (deltaX >= 0) deltaX++;