从数组

时间:2018-01-24 11:24:11

标签: java

这是使用图形组件创建匹配游戏的一部分。我需要编写一个名为randomOrder的类方法。我应该可以随机选择要使用的图片,我需要将它们随机放在电路板上(现在电路板是4x4)。

我想要一个随机移动数组中元素的方法。为此,我写了

public class Tools {

   public static void randomOrder(Object[] f){


      Object[] a = new Object[8];
   }
}

我从提示中得到的唯一内容如下:

" 在方法中使用临时数组,并从原始数组中一次取一个元素并将其放在临时数组中。如果采用数组位置,则需要随机化新位置。放置所有元素后,您可以将临时数组复制到原始数组。"

我不明白如何使用提示。我觉得这太复杂了,我甚至无法提出一个恰当的问题。

  1. 有人可以用更容易理解的方式将提示翻译给我 问题?
  2. 我的开始还好吗?
  3. 对不起,如果问题不好,我不知道怎么做得更好。欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

让我试试:

  

在方法

中使用临时数组

你已经这样做了,虽然数组a应该与f的长度相同

  

从原始数组中一次取一个元素并将其放在临时数组

您迭代a并为每个索引执行以下操作:

创建一个介于0和数组大小之间的随机整数,例如:对于4x4网格,您的数组的长度为16,因此索引将介于0到15之间(包括两者)。

f获取该索引处的元素,并将其放在a中的当前位置。然后将f中的索引设置为null

示例:

//iterate
for( int i = 0; i < a.length; i++ ) { 
  int random = ...; //create the random number here
  Object o = f[random];

  while( o == null ) {
    //see below
  }

  a[i] = o;
}
  

如果采用数组位置,则需要随机化新位置。

如果f中的元素已经为null,则创建一个新的随机数(即文本提示的内容)或递增该索引,直到您到达结尾或找到非null元素(从性能的角度来看可能更好,当你到达终点时,回到f的索引0)。

  

放置所有元素后,您可以将临时数组复制到原始数组。

完成填充a后,您再次迭代并根据f中的索引在a中设置元素,即

for( int i = 0; i < a.length; i++ ) { 
  f[i] = a[i];
}