Java随机化-(减号)和+;(加)

Java随机化-(减号)和+;(加),java,random,sprite,Java,Random,Sprite,有没有办法将加号或减号随机化?我有一个程序,精灵在屏幕上移动,当你点击它时,它会重新出现在不同的地方。我还希望它移动的方向也是随机的。目前,我只能将其设置为从左向右+,或从右向左- private int x = random.nextInt(150); private int y = random.nextInt(500); private int xSpeed = random.nextInt(10);//Horizontal increment of positi

有没有办法将加号或减号随机化?我有一个程序,精灵在屏幕上移动,当你点击它时,它会重新出现在不同的地方。我还希望它移动的方向也是随机的。目前,我只能将其设置为从左向右+,或从右向左-

private int x = random.nextInt(150); 
    private int y = random.nextInt(500);    
    private int xSpeed = random.nextInt(10);//Horizontal increment of position (speed)
    private int ySpeed = random.nextInt(10);// Vertical increment of position (speed)

public void update() {
        x = x +- xSpeed;
        y = y +- ySpeed;
}

a-b
也是
a+b*(-1)
,因此您可以将-1或1随机化,并将其乘以xSpeed/ySpeed。

您始终可以执行以下操作:

xSpeed = xSpeed * ( random.nextBoolean() ? 1 : -1 );
ySpeed = ySpeed * ( random.nextBoolean() ? 1 : -1 );

考虑有两种可能性:加号或减号。 因此,只需生成一个带有2个可能结果的随机数,并使用它来确定符号(加号或减号):


在其他答案中,您有在两个值之间随机选择的有效解决方案。我建议您选择任意数量的值:

private static Random rd = new Random();
public static <T> T randomItem(List<T> elts) {
    return elts.get(rd.nextInt(elts.size());
}
private static Random rd=new Random();
公共静态随机项(列表elts){
返回elts.get(rd.nextInt(elts.size());
}

xSpeed=random.nextInt(10)
替换为
xSpeed=random.nextInt(19)-9

许多人建议将速度乘以1或-1,但有一种更简单的方法可以避免乘法,这可能会稍微更有效。可能不足以在性能上产生明显的差异,但我认为无论如何都会放弃

public void update() {
    x = x + (random.nextBoolean() ? xSpeed : -xSpeed);
    y = y + (random.nextBoolean() ? ySpeed : -ySpeed);
}

这不是OP要求的。海报需要随机加减,而不是检索随机数。它可以直接应用……而且更通用。假设他扩展了方向数,而不是重复代码行,他可以在列表中添加更多选项
public void update() {
    x = x + (random.nextBoolean() ? xSpeed : -xSpeed);
    y = y + (random.nextBoolean() ? ySpeed : -ySpeed);
}