我有这个类首先存储鼠标光标的当前坐标,然后创建两个随机整数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+),表明光标确实倾向于移动到左边界。
答案 0 :(得分:1)
nextInt(20)
将在0
和19
之间生成均匀分布的值。因此nextInt(20) - 10
将生成-10
和9
之间的值。如您所见,此类分布的平均值为-0.5
。执行N
此类随机选择的平均值为-0.5N
。换句话说,随着时间的推移,你会看到朝向负数漂移的总和,并且因为你对X和Y坐标使用相同的随机函数,该点将向左上角漂移。
您应该使用nextInt(21) - 10
,这将在-10
和10
之间生成均匀分布的值,并获得您期望的结果。