2012-04-18 6 views
0

Я пытаюсь выяснить, как я могу получить случайные строки из таблицы, в том числе 10 слов. Я создаю игровой палач, но я не хочу, чтобы одно слово дважды. Игра должна продолжаться до тех пор, пока не будет выбрано 5 слов.Получите случайную строку из таблицы, но не более одного раза

Есть ли хорошие решения? Это метод рандомизации для моей таблицы, как сейчас.

private String wordList[] = { "String1", "String2", ..... } 
public void getRandomWord(){ 
    Random generator = new Random(); 
    int r = generator.nextInt(9); 
    activeWord = wordList[r]; 
} 

Я пытался получать эту работу, но не повезло:

ArrayList<String> usedWords= new ArrayList<String>(); 
public void getRandomWord(){ 
    Random generator = new Random(); 
    int r = generator.nextInt(9); 
    if(addWord(wordList[r])){ 
     activeWord= wordList[r]; 
    } 
} 

private boolean addWord(String word) { 
    for(String v : usedWords){ 
     if(!v.equals(word)){ 
      usedWords.add(word); 
      return true; 
     } 
     else{ 
      getRandomWord(); 
     } 
    } 
    return false; 
} 

Я думаю, что я сделал итерации, но я предполагаю то не nessasary.

Я думал о наличии таблицы строк с булевым значением. Поэтому, если значение слова истинно, плохо возьмите его, если его нет, плохо продолжайте, пока я не найду слово.

Я мог бы использовать цикл while для этого?

+2

Перемешать его заранее, а затем просто выбрать в порядке. Нет поисковых запросов, без булевых элементов, без столкновений. Посмотрите на такие алгоритмы, как Fisher-Yates. –

ответ

2

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

+0

Мне нравится идея этого. Это приложение для Android. Это все еще выполнимо, если я собираюсь добавить эти слова в строковое значение? – sindrem

+0

Да, я считаю, что ArrayList существует на платформе Android. –

+0

Спасибо большое. Это действительно помогло :) – sindrem

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