-1

如何从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)];

任何人都可以帮助我吗?谢谢是提前...!

4

5 回答 5

2

你能做这样的事情吗:

Collections.shuffle(copyOfArray);

然后循环过去?

for (int i = 0; i < copyOfArray.size(); i++) {
  println(copyOfArray.get(i))
}
于 2019-02-22T09:40:27.380 回答
1

试试这个解决方案,

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()in LinkedList 将检索并删除此列表的最后一个元素,如果此列表为空,则返回 null。

于 2019-02-22T09:42:42.773 回答
1

试试这个 -

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);
    }
于 2019-02-22T10:14:52.890 回答
0

试试这个。

int max = array.length() - 1;
int min = 0;
String Msg = array[new Random().nextInt(max - min + 1) + min];
于 2019-02-22T09:42:46.910 回答
0
  • 首先将您的 String 资源数组转换为 ArrayList
  • 将当前 ArrayList 中的值填充到 HashSet 并将该 HashSet 转换为新的 ArrayList
  • 现在洗牌新的 ArrayList
于 2019-02-22T10:12:40.033 回答