【问题标题】:Why does ThreadLocalRandom.current().nextInt(1, 255); return values outside of the range [1, 254]? [duplicate]为什么 ThreadLocalRandom.current().nextInt(1, 255);返回范围 [1, 254] 之外的值? [复制]
【发布时间】:2017-04-20 00:21:39
【问题描述】:

我正在尝试生成一个随机的正 8 位整数。 ThreadLocalRandom.current().nextInt(min, max) 的文档特别指出 min 是最小包含界限,而 max 是最大排除界限。但是,如果我将 max 设置为 > 128 的任何值,我偶尔会得到一个负值。

这似乎与整数的位有关,但文档没有说明 nextInt() 的位。我真的需要尽可能多的正 8 位数字。为什么我只指定一个正范围 (1, 255) 时 nextInt() 返回负值?

byte aa = 1;
    do {
            aa = (byte) ThreadLocalRandom.current().nextInt(1, 128);
    } while (aa > 0);
    System.out.println(aa);

【问题讨论】:

  • 你能给我们展示一个简单的程序来测试这个吗?
  • @LouisWasserman 完成

标签: java random


【解决方案1】:

您将结果转换为byte。 byte 只保存 -128 到 127 之间的数字,当 nextInt 返回大于 127 的数字时,它会溢出并翻转。

这不是nextInt 的错,而是byte 的演员的错。

【讨论】:

  • 哦。谢谢你。
猜你喜欢
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 2013-12-22
相关资源
最近更新 更多