2015-04-18 3 views
3

есть ли способ случайного символа «плюс» или «минус»? У меня есть программа, в которой спрайт перемещается по экрану, и когда вы нажимаете его, он появляется снова в другом месте. Я также хочу, чтобы направление, в котором оно двигалось, также было рандомизировано. На данный момент я могу установить его только для перемещения слева направо + или справа налево.Java Randomize - (минус) и + (плюс)

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

ответ

1

a - b также a + b * (-1), так что вы можете рандомизации -1 или 1 и умножить его на xSpeed ​​/ ySpeed.

4

Вы всегда можете сделать вариант:

xSpeed = xSpeed * (random.nextBoolean() ? 1 : -1); 
ySpeed = ySpeed * (random.nextBoolean() ? 1 : -1); 
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(); 
} 
-1

В других ответах, у вас есть обоснованные решения для выбора случайным образом между двумя значениями. То, что я предлагаю вам способ выбрать любое количество значений:

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

Это не то, о чем просит ОП. Плакат должен добавлять/вычитать случайным образом, а не извлекать случайное число. – SamTebbs33

+0

Это прямое применение ... и более общий. Предположим, что он расширяет количество направлений, вместо дублирования строк кода он мог бы просто добавить больше опций в список – Dici

1

заменить xSpeed = random.nextInt(10) с xSpeed = random.nextInt(19)-9

1

Многие предположили, умножая скорость на 1 или -1, но есть более простой способ, который позволяет избежать умножение, которое может быть несколько более эффективным. Наверное, недостаточно, чтобы сделать заметную разницу в производительности, но думал, что я все равно выброшу его.

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