簡體   English   中英

Java 隨機化 -(減號)和 +(加號)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM