【问题标题】:Get random integer in range (x, y]? [duplicate]获取范围内的随机整数(x,y]? [重复]
【发布时间】:2012-01-04 09:17:25
【问题描述】:

可能重复:
Java: generating random number in a range

如何生成一个随机整数i,使i属于(0,10]

我试过用这个:

Random generator = new Random();
int i = generator.nextInt(10);

但它给了我[0,10)之间的值。

但就我而言,我需要他们是(0,10]

【问题讨论】:

    标签: java random


    【解决方案1】:

    只需将结果加一即可。这将 [0, 10) 变成 (0,10] (对于整数)。 [0, 10) 只是说 [0, 9] 的一种更令人困惑的方式,而 (0,10] 是 [1,10] (整数)。

    【讨论】:

    • 好吧,加“1”肯定能解决问题,但我就是不明白为什么这个方法不能处理两个参数——范围的开始和结束?!
    【解决方案2】:

    怎么样:

    Random generator = new Random();
    int i = 10 - generator.nextInt(10);
    

    【讨论】:

    • +1 1/2 表示聪明,-1/2 表示迟钝。
    • 是的,绝对是迟钝的。我最初在考虑实数,但至少它仍然适用于整数! :)
    【解决方案3】:
    Random generator = new Random(); 
    int i = generator.nextInt(10) + 1;
    

    【讨论】:

    • 这会生成 [1, 11) 范围内的整数。
    • ...,现在我意识到我们在谈论整数,是一样的 :)
    • 好吧,加“1”肯定能解决问题,但我就是不明白为什么这个方法不能处理两个参数——范围的开始和结束?!
    • @thorinkor 传递两个整数需要将两个值复制到堆栈中以在方法内部使用。在这种情况下,值“1”的唯一目的是基本加法。没有理由为可以在不到一行代码的外部完成的单个操作引入额外的开销。
    • @bindsniper001 它使它更干净,就像isEmpty() 方法一样,您可以只使用.size() == 0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2018-06-22
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多