Java - Android Studio - 来自XML的二维数组的随机列

时间:2017-03-21 00:50:39

标签: java android arrays xml

我有一个包含数组数组的xml

document.getElementById('edit_here').onfocus = function(){
    if(  this === document.activeElement )
     return;
   else {
     this.focus();  
     location.href = '#result_here';
  }
}

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

<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>

我只需要在每次调用时洗牌的列...例如,如果pos为0 然后它会返回“oneAs”数组的项目。如果pos为1,那么它将返回洗牌的“twoAs”数组。 allAs [0] [shuffledarray] allAs [1] [shuffledarray]

我的xml数组数组目前正在这里举行

Integer pos = getQs(q);

但我不确定如何将其变成2dim数组。 任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

选项1:而不是&#34;改组&#34;数据,只要您需要从任何数组访问数据,您就可以随机化索引。你可以这样做:

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中。您需要创建自己的代码以确定所需的信息。