2012-04-06 3 views
0

Я делаю игру, которая будет задавать разные вопросы в java. вопросы хранятся в некотором arraylist. Моя проблема заключается в том, что эти вопросы не следует повторять. и если все вопросы заданы, программа должна остановиться. Я использовал случайную функцию java. но он провалился. любая помощь будет заметна С уважениемгенерирование не повторяющихся случайных чисел в java

+0

Как Случайные неудачные? Вы его засеваете, например. с текущим временем? – j13r

+2

['shuffle()'] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#shuffle (java.util.List% 29) список. – NullUserException

+3

Каждый список, который я shuffeling – j13r

ответ

0

Копировать список вопросов к временному списку, и

while(list.size() > 0){ 
    int i = Math.floor(Math.Random() * list.size()); 
    list.get(i); //do something with question 
    list.remove(i); 
} 

Это петля, пока список содержит элементы, тянущие случайный элемент и затем удаляет его из списка.


редактировать для осветления - это гарантирует, что вы не получаете дубликаты

+0

все, что я хочу сделать, это выбрать любой случайный вопрос у arraylist и убедиться, что вопрос не повторится после того, как он был спрошен. То, как вы говорите, будет идти по порядку, насколько я предполагаю. теперь я надеюсь, что моя проблема понятна вам.если есть 50 вопросов. Я хочу, чтобы любой вопрос из всех 50-х спросил. как бы это ни было 40-й в первый раз. но после того, как его спросили, его не следует повторять. Все 50 вопросов должны быть заданы случайным образом –

+0

Именно это и делает этот код, вы генерируете случайное число между 0 и размером списка, затем вынимаете вопрос и удаляете вопрос из списка по этому индексу, чтобы убедиться, что он не является - Нет. Затем, после этого, сгенерируйте другое случайное число, используя новый размер (размер - n) списка. –

+0

thanx это действительно сработало –

6

Если я правильно понял ваш вопрос, вы хотите отобразить вопросы в случайном порядке. Существует простое решение этой проблемы. Используйте метод java.util.Collections.shuffle для случайной перестановки вопросов в списке. И затем итерацию с самого начала по списку. Этот алгоритм имеет линейную временную и пространственную сложность.

+0

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

+0

Вы только перетасовываете один раз. список -> «все сделано» – barsju

+0

'shuffle' ia, как перетасовка колоды карт. Вы не получите повторений. – emory

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