Android случайная неповторяющаяся строка - PullRequest
1 голос
/ 16 октября 2011

Я делаю игру типа бинго.У меня есть 5x5 сетка кнопок изображений, каждая из которых имеет свое собственное текстовое представление.Когда приложение запускается или сбрасывается, я хочу, чтобы каждое текстовое представление отображало случайную строку без какой-либо одной строки, отображаемой дважды во время игры.В настоящее время у меня есть строки в массиве ресурсов, с 127 элементами:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="tile_text">
    <item>String 1</item>
    <item>String 2</item>
    <item>String 3</item>
    ...all the way to String 127
</string-array>
</resources>

И для отображения случайной строки при каждом просмотре текста:

public String[] myString;

Resources res = getResources();
myString = res.getStringArray(R.array.tile_text);

Random random = new Random(System.currentTimeMillis());

int[] textViews = {

//I have all my textviews added to this array
};

for(int v : textViews) {
        TextView tv = (TextView)findViewById(v);

        tv.setText(myString[random.nextInt(myString.length)]);          
}

Вышеприведенное работает хорошо, но даже с200 строк в массиве на выбор, некоторые элементы по-прежнему отображаются дважды.Есть ли способ заставить массив перемешать и не выбирать одну и ту же строку дважды для каждой игры?Я искал и нахожу информацию о случайных строках, но ничего о неповторяющихся случайных строках, поэтому извиняюсь, если это повторяющийся вопрос.

1 Ответ

1 голос
/ 16 октября 2011

Я бы держал список строк, которые вы уже добавили, и затем продолжал бы выбирать новые случайные строки, пока вы не найдете ту, которой еще нет в вашем списке.

Примерно так:

Vector<String> alreadyUsed = new Vector<String>();

for(int v : textViews) {
    TextView tv = (TextView)findViewById(v);

    String nextString;
    do {
        nextString = myString[random.nextInt(myString.length)];                
    } while (alreadyUsed.contains(nextString));
    alreadyUsed.add(nextString);

    tv.setText(nextString);          
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...