[英]Java Randomize - (minus) and + (plus)
有沒有辦法隨機化一個加號或減號字符? 我有一個程序,其中一個精靈在屏幕上移動,當你點擊它時,它會重新出現在不同的地方。 我也希望它移動的方向也是隨機的。 目前我只能將其設置為從左向右移動+,或從右向左移動-。
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;
}
你可以隨時做一個變體:
xSpeed = xSpeed * ( random.nextBoolean() ? 1 : -1 );
ySpeed = ySpeed * ( random.nextBoolean() ? 1 : -1 );
a - b
也是a + b * (-1)
,因此您可以隨機化-1或1並將其乘以xSpeed / ySpeed。
考慮有兩種可能性:加號或減號。 因此,只需生成一個包含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();
}
用xSpeed = random.nextInt(19)-9
替換xSpeed = random.nextInt(10)
許多人建議將速度乘以1或-1,但有一種更簡單的方法可以避免乘法,這可能會稍微提高效率。 可能還不足以在性能方面做出明顯的改變,但我認為無論如何我都會把它扔出去。
public void update() {
x = x + (random.nextBoolean() ? xSpeed : -xSpeed);
y = y + (random.nextBoolean() ? ySpeed : -ySpeed);
}
random.nextInt(1)*2-1
random.nextInt(1) 會給你 0 或 1。Times 2 給你 0 或 2。減一給你 -1 或 1
在其他答案中,您可以在兩個值之間隨機選擇有效的解決方案。 我建議你的方法是在任意數量的值之間進行選擇:
private static Random rd = new Random();
public static <T> T randomItem(List<T> elts) {
return elts.get(rd.nextInt(elts.size());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.