簡體   English   中英

在兩個值的范圍內獲得隨機長度

[英]getting a random long in range of two values

我寫了一個簡單的自動點擊腳本,它工作正常,因為每次我相信它應該點擊它。 有一件事我想知道它,它意味着在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);提出了我的擔憂Thread.sleep(rand.nextInt(5000-2500) + 2500);

我使用nextInt(int x)方法獲取兩個值之間的隨機INT,但Thread.sleep(); 我正在使用的方法需要很long作為參數。 這是否意味着它會截斷或什么? 而不是2500毫秒它只是2秒? 或3秒或4秒而不是2646毫秒或3876毫秒等?

它是否實際上將每次點擊延遲了2500-5000的隨機毫秒? 我很難搞清楚這一點。

延遲值將是2500到4999之間的隨機數,因為nextInt上限是獨占的。 來自Java SE規范

public int nextInt(int bound)

返回從此隨機數生成器的序列中提取的偽隨機,均勻分布的int值,介於0(包括)和指定值(不包括)之間。 nextInt的常規協定是偽隨機生成並返回指定范圍內的一個int值。 所有可能的int值都以(近似)相等的概率產生。

rand.nextInt(5000-2500) + 2500rand.nextInt(2500) + 2500 (在我看來是一種更清晰的編寫方式)相同。

int值也被轉換為long而不會丟失信息(long的范圍比int寬,所以沒有問題)。 來自Java SE規范

從int類型到long類型的轉換需要將32位整數值的運行時符號擴展為64位長表示。 沒有信息丟失。

最后關於隨機不是真正的隨機,你是對的它是偽隨機的(這意味着所有可能的數字沒有完全相等的概率,但是大致相等的概率)。 我不完全確定您使用此代碼的是什么,但我認為這將是“隨機”以滿足您的需求。

你可以看看這篇關於給定范圍內java中隨機值的帖子 這篇關於隨機隨機性的帖子

PD:你的代碼(imho)的一個很好的改進是使rand變量private static而不是本地。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM