生成大于或小于先前随机数的随机数

时间:2014-10-31 00:30:34

标签: java math random int inequality

我试图生成一个大于和小于前一个随机数的随机数,但无法弄清楚如何。

到目前为止,我有这个:

number = (int)( max * Math.random() ) + min;
guess = (int)( max * Math.random() ) + min;
if (guess<number)
   {
      guess = (int)( max * Math.random() ) + min;
      System.out.println(guess);
    }
else if (guess>number)
 {
      guess = (int)( max * Math.random() ) + min;
     System.out.println(guess);
 }

更新:如何确保它不会生成已生成的随机数?计算机有10次尝试猜测生成的数字,但我想让它成为逻辑,因为它不会产生一个它已经知道是错误的。

4 个答案:

答案 0 :(得分:3)

如何订购随机数列表......

public static void method2() throws Exception {
    Random rng = new SecureRandom();
    Set<Integer> numbers = new HashSet<>();
    while (numbers.size() < 3) {
        // number only added if not already present in Set, set values are unique
        numbers.add(rng.nextInt(MAX));
    }
    List<Integer> numberList = new ArrayList<>(numbers);
    Collections.sort(numberList);
    // lower random at index 0, mid at index 1
    // you can guess where the other one is hiding 
    System.out.println(numberList);
}

我先将它们放入一组,以确保没有重复。当然,如果MAX的值为1,则可能需要一段时间。

这种方法的一个优点是数字应该分布在0到MAX之间。如果直接使用范围,则必须处理上限和下限。

当然,只要最大值(明显)高于列表中的数字量(在这种情况下只有3),这种方法也可以很容易地扩展到范围内工作。

答案 1 :(得分:0)

如果计算机播放器收到其猜测太低或太高(或正确)的信息,则需要跟踪正确值可能的值的范围。最初,这是整个范围min..max。一旦猜到错误的值,就可以移动minmax

if (guess<number)
{
   min = guess + 1; // Don't guess any more number <= guess
}
else if (guess>number)
{
   max = guess - 1; // Don't guess any more number >= guess
}
else
{
   // I WIN!!
}

现在,您始终拥有minmax之间有效猜测的正确范围。

现在,您在该范围内生成随机数的逻辑似乎有些偏差。 {@ 3}} @ Solver答案中链接的问题具有正确的逻辑:

guess = (int)( (max - min) * Math.random() + 1) + min;

答案 2 :(得分:-1)

这将始终返回如下数字:less&lt; = number&lt; = more

  number = (max * Math.random()) + min;
  less = (number * Math.random()) + min;
  more = ((max - number) * Math.random()) + number;

编辑: 误解了这个问题。

答案 3 :(得分:-1)

您可以在获取随机数时指定最小值和最大值,如下所示:How do I generate random integers within a specific range in Java?