Как вы останавливаете дубликаты выходов из массива? - PullRequest
0 голосов
/ 07 ноября 2010

У меня есть массив слов.Когда действие запускается, оно отображает слово, а затем, когда вы щелкаете по экрану, оно отображает другое случайное слово из массива.Я смог продвинуться далеко (с некоторой помощью), но я немного застрял.Когда вы нажимаете на экран, чтобы отобразить новое слово, как я могу убедиться, что слово не было отображено в массиве уже?Вот что у меня есть.

private String[] myString;
public static final Random rgenerator = new Random();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.study);

    //Takes a random item from array and creates string
    Resources res = getResources();
    myString = res.getStringArray(R.array.list);
    String q = myString[rgenerator.nextInt(myString.length)];

    //Displays random array string in TextView
    TextView wordTextView = (TextView) findViewById(R.id.word);
    wordTextView.setText(q);

    //Set up click listener for new word
    View newWord = findViewById(R.id.word);
    newWord.setOnClickListener(this);

}

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.word:
        //Takes a random item from array and creates string
        String q = myString[rgenerator.nextInt(myString.length)];

        //Displays random array string in TextView
        TextView wordTextView = (TextView) findViewById(R.id.word);
        wordTextView.setText(q);
    }
}

Ответы [ 2 ]

1 голос
/ 07 ноября 2010

Если вы думаете об этом, у вас есть два способа сделать это:

  1. После отображения слова удалите его из списка. Затем, когда вы в следующий раз выберете случайное слово из списка, его там не будет. Это работает, только если у вас есть список, который вы можете изменить.
  2. Отслеживайте слова, которые вы уже показали, и если вам случится выбрать слово, которое вы ранее выбрали, просто выберите другое
0 голосов
/ 10 ноября 2010

Моя рекомендация будет использовать ArrayList . Если вы хотите сохранить содержимое, то это может занять 2 ArrayLists.

Это довольно просто на самом деле:

List wordsList = new ArrayList<String>();
List usedList = new ArrayList<String>();

String s = wordsList.get(rgenerator.nextInt(wordsList.size()));

wordsList.remove(s);
usedList.add(s);

Второй список является необязательным, если вы хотите иметь список слов, которые вы использовали. Если вам это не нужно, вы можете удалить строки "usedList". Извините, если есть какие-либо ошибки. Написал это немного поспешно. В любом случае, посмотрите ArrayList в Javadocs, и вы поймете это немного лучше. Вы фактически удаляете String из ArrayList, поэтому вам не придется беспокоиться о повторениях в этом случае.

...