Как получить случайное значение из массива строк без повторения? - PullRequest
0 голосов
/ 22 февраля 2019

Как получить случайное значение из массива строк в Android без повторений?

У меня есть массив в String.xml файле, как показано ниже -

    <string-array name="msg">
    <item>Cow</item>
    <item>Pig</item>
    <item>Bird</item>
    <item>Sheep</item>
</string-array>

Я выбираю случайную строку с помощьюиспользуя следующий код -

String[] array = Objects.requireNonNull(context).getResources().getStringArray(R.array.msg);
String Msg = array[new Random().nextInt(array.length)];

Может кто-нибудь помочь мне, пожалуйста?Спасибо заранее ...!

Ответы [ 5 ]

0 голосов
/ 22 февраля 2019

попробуйте это -

array = Objects.requireNonNull(context).getResources().getStringArray(R.array.msg);
    //String msg = array[new Random().nextInt(array.length)];

    LinkedList<String> myList = new LinkedList<String>();

    for (String i : array)
        myList.add(i);
    Collections.shuffle(myList);

    for (int i = 0; i < myList.size(); i++) {
       String msg=myList.get(i);
    }
0 голосов
/ 22 февраля 2019
  • Сначала преобразуйте массив ресурсов String в ArrayList
  • Заполните значение из текущего ArrayList в HashSet и преобразуйте этот HashSet в новый ArrayList
  • Теперь перетасуйте новый ArrayList
0 голосов
/ 22 февраля 2019

Попробуйте это решение,

LinkedList<String> myList = new LinkedList<String>();

  String[] words = { "Cow", "Pig", "Bird", "Sheep" };
     for (String i : words) 
       myList.add(i);
       Collections.shuffle(myList);

Тогда

sampleText.setText(myList.pollLast());

pollLast() в LinkedList извлечет и удалит последний элемент этого списка или вернет ноль, если этот списокпустой.

0 голосов
/ 22 февраля 2019

попробуйте это.

int max = array.length() - 1;
int min = 0;
String Msg = array[new Random().nextInt(max - min + 1) + min];
0 голосов
/ 22 февраля 2019

Можете ли вы просто сделать что-то вроде этого:

Collections.shuffle(copyOfArray);

Затем выполните цикл?

for (int i = 0; i < copyOfArray.size(); i++) {
  println(copyOfArray.get(i))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...