有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Android Studio从XML中洗牌2D数组列

我有一个包含数组的xml

<resources>
   <array name="oneAs">
    <item>"1option1"</item>
    <item>"1option2"</item>
    <item>"1option3"</item>
    <item name="answer">"1answer"</item>
</array>
<array name="twoAs">
    <item>"2option1"</item>
    <item>"2option2"</item>
    <item>"2option3"</item>
    <item name="answer">"2answer"</item>
</array>

<!--all answers -->
<array name="allAs">
    <item>@array/oneAs</item>
    <item>@array/twoAs</item>
</array>
</resources>

我已经返回了它需要的行位置

Integer pos = getQs(q);

我只需要在每次呼叫时将列洗牌。。。例如,如果pos为0 然后它将返回“oneAs”数组shuffed的项。如果pos为1,那么它将返回洗牌后的“twoAs”数组项。 阿拉斯[0][ShuffleArray] 阿拉斯[1][Shuffledaray]

我的xml数组当前保存在这里

TypedArray answers = res.obtainTypedArray(R.array.allAs);

但我不确定如何将其放入2dim数组中。 感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    选项1:在需要访问任何数组中的数据时,您可以随机化索引,而不是“随机”数据。您可以这样做:

    Random rand = new Random ();
    rand.nextInt(array.length());
    

    像这样的事情真的没有解决办法

    选项2:也有不同的洗牌算法。根据用于创建阵列的类,可以使用Fisher-Yates shuffle:

      // Implementing Fisher–Yates shuffle
      static void shuffleArray(Object[] ar)
      {
        Random rnd = new Random();
        for (int i = ar.length - 1; i > 0; i )
        {
          int index = rnd.nextInt(i + 1);
          // Simple swap
          int a = ar[index];
          ar[index] = ar[i];
          ar[i] = a;
        }
      }
    

    我建议做选项2,因为它更容易阅读和理解。您不必编辑XML。这与XML文件在Android中的用途背道而驰

    要将TypeArray转换为2dim数组,请参阅本文:http://basememara.com/storing-multidimensional-resource-arrays-in-android/。这就是你要找的。该解决方案内置于Android中。您需要创建自己的代码来精确获取所需的信息