2012-06-18 1 views
0

Попытка получить случайную строку из ListArray на нажатой кнопке. Всегда получать то же самое, второй элемент. Независимо от того, насколько большой массив.Невозможно получить случайный элемент из ListArray

Вот что я на нажатой клавише:

int randIndex = getRandomIndex(ListArray.size()); 
String chosenItem = ListArray.get(randIndex); 

Метод getRandomIndex испрашивается заранее, и выглядит следующим образом:

public int getRandomIndex(int size) { 
     return (1+(int)Math.random()*size); 
    }; 

ответ

3

Бросок от int к double имеет приоритет над умножением size. Когда вы отбрасываете Math.random() в int, десятичная метка отбрасывается, а результат равен 0. Таким образом, getRandomIndex всегда будет возвращать 1.

Другими словами,

return (1 + (int) [some double variable] * size); 

такое же, как

return 1 + (0)*size; 

, который является таким же, как

return 1; 

это исправить с:

private static final Random rand = new Random(); 

public int getRandomIndex(int size) { 
    return rand.nextInt(size); 
} 

Это более читаемо и обеспечивает равномерное распределение случайных чисел.

+0

Итак, что можно сделать здесь? – wswld

+0

Вместо этого используйте класс «Случайный» ... это более читаемо, если честно. –

+0

Я боролся с «Случайным» некоторое время, прежде чем я встретил людей, предлагающих этот путь. – wswld

 Смежные вопросы

  • Нет связанных вопросов^_^