如何在不重复的情况下从字符串数组中获取随机值?

How to get a random value from a string array without repetition?

如何在不重复的情况下从 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)];

有人可以帮我吗?谢谢提前...!

你能做这样的事情吗:

Collections.shuffle(copyOfArray);

然后循环遍历?

for (int i = 0; i < copyOfArray.size(); i++) {
  println(copyOfArray.get(i))
}

试试这个解决方案,

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());
LinkedList 中的

pollLast() 将检索并删除此列表的最后一个元素,如果此列表为空,则 returns null。

试试这个。

int max = array.length() - 1;
int min = 0;
String Msg = array[new Random().nextInt(max - min + 1) + min];
  • 首先将您的 String 资源数组转换为 ArrayList
  • 将当前 ArrayList 的值填充到 HashSet 并将该 HashSet 转换为新的 ArrayList
  • 现在随机播放新的 ArrayList

试试这个 -

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);
    }