我写了一个简单的自动点击脚本,它运行正常,因为每次我认为应该点击它。有一件事我想知道它,它意味着在2500毫秒和5000毫秒之间的随机间隔延迟。我只是不是100%这样做?
所有代码都在这里:
public static void click(int desiredAmount)
{
int counter = 0;
Random rand = new Random();
while (counter < desiredAmount)
{
try {
Thread.sleep(rand.nextInt(5000-2500) + 2500);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
robot.mousePress(MouseEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK);
++counter;
}
}
只是一个点击的简单方法,我对这行代码Thread.sleep(rand.nextInt(5000-2500) + 2500);
提出了我的担忧
我使用nextInt(int x)
方法在两个值之间获取随机INT,但我使用的Thread.sleep();
方法将long
作为参数。这是否意味着它会截断或什么?而不是2500毫秒它只是2秒?或3秒或4秒而不是2646毫秒或3876毫秒等?
它是否实际上将每次点击延迟了2500-5000的随机毫秒?我很难搞清楚这一点。
答案 0 :(得分:3)
延迟值将是2500到4999之间的随机数,因为nextInt上限是独占的。来自Java SE Specification:
public int nextInt(int bound)
返回从该随机数生成器序列中提取的伪随机,均匀分布的int值,介于0(包括)和指定值(不包括)之间。 nextInt的常规协定是伪随机生成并返回指定范围内的一个int值。所有绑定的可能int值都以(近似)相等的概率生成。
rand.nextInt(5000-2500) + 2500
与rand.nextInt(2500) + 2500
相同(在我看来,这是一种更清晰的写作方式)。
int 值也会转换为 long 而不会丢失信息(long的范围比int宽,所以没有问题)。来自Java SE Specification:
从int类型到long类型的转换需要将32位整数值的运行时符号扩展为64位长表示。没有信息丢失。
最后关于随机不是真正的随机,你是对的伪随机(这意味着所有可能的数字没有完全相等的概率,但大致相等)。我不完全确定您使用此代码的是什么,但我认为这将是&#34;足够随机&#34;满足您的需求。
您可以查看this post有关给定范围内java中随机值的信息。 this post关于随机随机性。
PD:您的代码(imho)的一个很好的改进是使rand变量private static
而不是本地。