(int)exp.sample() 在代码中是如何工作的?

how does (int)exp.sample() work in the code?

ExponentialDistribution exp = new ExponentialDistribution(4.0);
        for(int i = 1; i < 20; i++){
            timestamp[i] = (int)exp.sample() + 1+timestamp[i-1];

这里的timestamp是一个整数数组,并根据上述条件为其分配了一个随机值。 (int)exp.sample() 的作用是什么以及它如何为 i 分配一个随机值?

来自指数分布API: http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/distribution/ExponentialDistribution.html#sample()

public double sample()

Generate a random value sampled from this distribution. The default implementation uses the inversion method.

Algorithm Description: this implementation uses the Inversion Method to generate exponentially distributed random values from uniform deviates.

因此,当您看到 (int)exp.sample() 时,我们正在将其转换为它选择的随机值。 exp 是我们创建的 ExponentialDistribution(4.0) 的实例,因此 exp.sample() 调用 ExponentialDistributionsample() 方法。

现在 (int).

将对象类型或基本类型放在括号中(在本例中 (int))放在另一个 Object/primitive 之前称为“转换”。 Casting variables in Java

差不多,因为sample() returns一个double,但是timestamp存储ints,我们需要切换其中一种类型(他们必须匹配),并且更改 exp.sample() 更容易。

所以,总而言之,这表示“获取对象 exp,调用它的方法 sample(),然后将其转换为 int”。

class ExponentialDistribution 在 Exponential Distribution 之后生成一个伪随机数。它是伪的,因为它不是真正随机的。它使用一个方程来生成你得到的每一个随机数。

方法exp.sample() returns序列中的下一个随机数。使用 (int) 你只得到它的整数部分。