0

我对 Java 很陌生,我坚持这一点,我使用的是公式:

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

我必须编写将随机整数分配给以下范围内的变量 x 的语句

  1. 1 < x <= 8
    1 为最小值,8 为最大值

    我是正确的1 + (int)(Math.random()*(8-1+1))吗?

  2. -5 < x <= 3
    3 是最小值,-5 是最大值

    这会是3 + (int)(Math.radom()*(-5-3+1))什么?

任何帮助将不胜感激。

4

4 回答 4

3

您想要一个公式在范围内取一个实数,并在该范围内[0..1)返回一个整数[1..8]

  • When random()picks a real number it the range [0..1),
  • 然后乘以 8,
  • 你得到一个范围内的值[0.0 .. 8.0)
  • 然后你转换为(int),你在范围内有一个整数[0 .. 7]
  • (int)因为使用“地板”阶跃函数转换为圆形。
  • 添加一个。
于 2013-10-29T16:12:41.863 回答
0

使用以下代码。它将生成介于 0 和提供的最大值之间的 nos。

 Random generator = new Random(); //Creates a new random number generator
  for(int i=0; i<100; i++){
      /**
       *Returns a pseudorandom, uniformly distributed int value
       * between 0 (inclusive) and the specified value (exclusive), drawn from
       * this random number generator's sequence
       */
        System.out.println(generator.nextInt(100));
  }
于 2013-10-29T16:18:38.373 回答
0
  1. 获取具有范围( min, max ]的随机值,这与问题相同。

如果使用JDK 1.7版本,则可以使用一行代码来实现这样的功能:

ThreadLocalRandom.current().nextInt(min, max)+1

如果JDK版本在1.7以下,我们可以通过以下方式实现。

随机随机=新随机();

random.nextInt(max - min) + min +1;

2.获取范围为[ min, max )的随机值

使用, ThreadLocalRandom.current().nextInt(min, max)

或者

random.nextInt(max - min) + min ;

于 2013-10-29T16:25:17.413 回答
0

Math.random() 为您提供 0 和 1 之间的值。将其乘以您的范围、范围的大小,而不是绝对值。如果你想要 1-10 那就是 9,如果你想要 0-10 那就是 10,如果你想要 5-7 那就是 2,等等。

然后加或减从 0 到起始值。

如果你想要 0-9 那么你就完成了(你应该在上一步中乘以 9)

如果你想要 1-10 然后加 1

如果你想要 -5 到 5 然后减去 5

如果你想要 5-7 然后做 (Math.random()*2)+5;

于 2013-10-29T16:52:10.237 回答