java - 随机数生成器给出奇怪的结果

标签 java random cursor

我有这个类,它首先存储鼠标光标的当前坐标,然后创建两个随机整数 x 和 y 都在 -10 和 10 之间,然后水平和垂直移动鼠标光标等于这些生成的数字的量分别。

public class Test {
            private static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            private static int width= (int) screenSize.getWidth();
            private static int height=(int) screenSize.getHeight();
            private static int currentX=(int) MouseInfo.getPointerInfo().getLocation().getX();
            private static int currentY =(int)  MouseInfo.getPointerInfo().getLocation().getY();

            public static void main(String[] args)  throws java.awt.AWTException {

                    Robot robot=new Robot();
                    Random random = new Random();
                    int xMove;
                    int yMove;
                    int[] resultArray=new int[10000];
                    for (int i=0; i<10000; i++)  {
                        refreshCoords();
                        xMove=random.nextInt(20) - 10;  // - 10 to 10
                        yMove=random.nextInt(20) - 10;
                        robot.mouseMove(currentX + xMove, currentY + yMove);                                                                      
                        resultArray[i]=xMove;
                    }
                    System.out.println(sumArray(resultArray)); //returns - 4000/-5000
                }

                private static void refreshCoords()  {
                            currentX=(int) MouseInfo.getPointerInfo().getLocation().getX();
                            currentY=(int) MouseInfo.getPointerInfo().getLocation().getY();
                }

                private static int sumArray(int[] resultArray)  {
                            int result=0;
                            for (int i=0; i<resultArray.length; i++)  {
                                result+=resultArray[i];
                            }
                            return result;
                }
}

问题是,虽然我预计鼠标光标大部分会停留在同一位置或逐渐在屏幕上移动而不是太远,但无论鼠标光标最初位于何处,它都倾向于移动到左上角。我不明白这里出了什么问题,为什么会发生这种情况?我认为,如果每次循环鼠标光标移动 - 10 到 10 到右/左和顶部/底部,它会在屏幕上随机徘徊,而不是喜欢某些特定的位置/角落。我总结了所有水平移动,它给出了一个很大的负数(-4000+或-5000+),表明光标确实倾向于移动到左边界。

最佳答案

nextInt(20) 将生成 019 之间均匀分布的值。因此 nextInt(20) - 10 将产生 -109 之间的值。正如您所看到的,这种分布的平均值是-0.5。执行 N 这样的随机选择将得到 -0.5N 的平均值。换句话说,随着时间的推移,您会看到总和向负值漂移,并且由于您对 X 和 Y 坐标使用相同的随机函数,因此该点将向左上角漂移。

您应该使用 nextInt(21) - 10,它将生成 -1010 之间均匀分布的值,并获得您期望的结果。

关于java - 随机数生成器给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46130544/

相关文章:

windows - 如何在 Windows 中隐藏光标? (德尔福)

JavaFX8 - 从不同线程引用 FXML 对象

java - 您可以从 main 外部的方法获取输入参数而不传递参数吗?

java - 为什么 GIT 中的文本行结尾不统一,尽管 * text=auto

java - 需要使用随机数和模数的帮助

javascript - 在 JavaScript 中将数字计算为数组中的数字

qt - PyQt:如何将光标重置为任何悬停的光标

java - Spring Mongodb Upsert 嵌套文档

javascript - 生成 0 到 'x' 之间的唯一随机数(整数)

javascript - 如何显示闪烁的光标?