【问题标题】:Random Generator with range + exception具有范围 + 异常的随机生成器
【发布时间】:2017-06-05 21:15:39
【问题描述】:

我想创建一个具有范围(由var1 定义)和一个异常(由blockvar1 定义)的随机生成器

这是我写的:

Random rand = new Random();
int var1 = rand.nextInt(var1) + 1;
do{
    blockvar1 = rand.nextInt(var1) + 1;
}
while (var1 == blockvar1);

【问题讨论】:

  • 暂时没有理由,就做if(var1 >= blockvar1) { var1++; }除此之外,"it didn't work"到底是什么意思?
  • 您的预期输出是什么?

标签: java random generator


【解决方案1】:

这应该可以解决问题。它创建一个给定最大值和最小值的整数,并且不生成第三个参数中给定的数字。

public static Integer RandomNumberRange(int max, int min, int block)
{
    Random rand = new Random();
    int randomNum;

    do {
        randomNum = rand.nextInt((max - min) + 1) + min;
    } while (randomNum == block && (max != block && block != min));

    return randomNum;
}

调用范围为 5-1 和 2 的函数作为阻塞的输出示例

public static void main(String[] args) {
    for(int i = 0; i < 20; i++)
        System.out.print(RandomNumberRange(5, 1, 2) + " ");

}//main method

输出

1 5 5 1 5 4 3 3 4 1 5 5 5 1 5 4 3 5 1 5 

【讨论】:

    【解决方案2】:

    我的代码有两个(小)问题:

    1. 您似乎使用var1 有两个目的,它既是随机数的上限,又是随机数本身;这会导致混乱和可能不符合预期的结果(即使对随机数的预期是模糊的)。
    2. 我不太喜欢循环。在实践中,它不会永远运行,仍然没有关于它运行多少次的硬性上限。

    这是我的建议:

    private static Random rand = new Random();
    
    /**
     * Generates a pseudo-random number in the range 0..var1, but not blockvar1
     * @param var1 upper bound (inclusive) of random number
     * @param blockvar1 forbidden number
     * @return the generated random number
     */
    public static int randomNumberRange(int var1, int blockvar1) {
        if (blockvar1 < 0 || blockvar1 > var1) {
            throw new IllegalArgumentException("blockvar1 must be between 0 and var1 inclusive");
        }
        int result = rand.nextInt(var1);
        if (result >= blockvar1) {
            result++;
        }
        return result;
    }
    

    重复调用randomNumberRange(4, 2)的示例输出:

    1 1 3 3 1 0 0 0 4 4 1 0 3 3 4 3 3 0 1 3 
    

    你会注意到它给你的数字从 0 到 4 包括在内,但从不 2。

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 2023-03-04
      • 2015-08-18
      • 1970-01-01
      • 2018-10-02
      • 2010-12-24
      相关资源
      最近更新 更多