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