在 Java 中创建随机数生成器 - 查看 num1 和 num2,在哪些情况下我会使用这些方法中的任何一种来创建 1 到 8 之间的随机数?一个比另一个更有效率,还有其他好处吗?

import java.util.*;

public class Chpt3 {
  public static void main(String[] args) {
    Random rand = new Random();
    int num1 = Math.abs(rand.nextInt()) % 8 + 1;
    int num2 = rand.nextInt(8) + 1;
    System.out.println(num1);
    System.out.println(num2);

  }
}

最佳答案



这有一个微妙的错误。 Math.abs(Integer.MIN_VALUE) 返回 MIN_VALUE,这是一个负数。一个更简单的解决方案是

(rand.nextInt() & 7) + 1;

这将始终是非负的并且会稍微快一点。



这更快,但更重要的是,更清楚您要实现的目标。由于后面的原因,它是更好的选择,而不仅仅是速度。

注意:如果你真的很喜欢这个,你可以使用 abs。然而,这并不像 nextInt 调用那样干净。
Math.abs(rand.nextInt() % 8) + 1;

关于Java Math.abs 随机与 nextInt(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39176165/

10-10 01:28