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

时间:2015-04-18 12:00:41

标签: java random sprite

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

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;
}

6 个答案:

答案 0 :(得分:4)

您可以随时执行以下变体:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

public int getRandomSign() {
    Random rand = new Random();
    if(rand.nextBoolean())
        return -1;
    else
        return 1;
}

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

许多人建议将速度乘以1或-1,但有一种更简单的方法可以避免乘法,这可能会稍微提高效率。可能还不足以在性能方面做出明显的改变,但我认为无论如何我都会把它扔出去。

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

答案 5 :(得分:-1)

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

private static Random rd = new Random();
public static <T> T randomItem(List<T> elts) {
    return elts.get(rd.nextInt(elts.size());
}