【问题标题】:ThreadLocalRandom random integer not in rangeThreadLocalRandom 随机整数不在范围内
【发布时间】:2017-11-04 18:15:06
【问题描述】:

我执行了这串代码:

int newOrderLow = ThreadLocalRandom.current().nextInt(50, shipCapacity / 3);
int newOrderUp = ThreadLocalRandom.current().nextInt(newOrderLow, shipCapacity + 1); // not lower than lower value
int newOrderMid = ThreadLocalRandom.current().nextInt(newOrderLow, newOrderUp + 1); // in between
        
Log.d(TAG, "New Order: {" + newOrderLow + ", " + newOrderMid + ", " + newOrderUp + "}");

并开始调试它。例如,当我将 shipCapacity 设置为 600 时,我在控制台中记录了这些数字:

New Order: {493, 772, 672}

有一件事是上限不在[lower value;船舶容量 + 1], 另一个是中间值结果。那么问题是什么?如何使用 ThreadLocalRandom 正确生成随机整数?

【问题讨论】:

    标签: java android random


    【解决方案1】:

    您可能需要考虑运行以下测试代码:

        @Test
        public void test1() {
            final int shipCapacity = 600;
            for (int i = 0; i < 1000000; i++) {
                int newOrderLow = ThreadLocalRandom.current().nextInt(50, shipCapacity / 3);
                int newOrderUp = ThreadLocalRandom.current().nextInt(newOrderLow, shipCapacity + 1); // not lower than lower value
                int newOrderMid = ThreadLocalRandom.current().nextInt(newOrderLow, newOrderUp + 1); // in between
    
                System.out.println("numbers= " + newOrderLow + " " + newOrderUp + " " + newOrderMid);
                assertThat(newOrderLow).isBetween(50, shipCapacity / 3);
                assertThat(newOrderUp).isBetween(newOrderLow, shipCapacity + 1);
                assertThat(newOrderMid).isBetween(newOrderLow, newOrderUp + 1);
        }
    

    我已经这样做了,在我的机器上似乎没有违反你提到的任何规则。

    在我看来,问题出在其他地方,不在您提供的代码中,而是您自己测试一下。

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 2014-05-08
      • 1970-01-01
      • 2015-06-21
      • 2010-09-22
      • 2014-08-11
      相关资源
      最近更新 更多