android studio,为内存游戏排序int数组

时间:2016-05-13 13:00:15

标签: java android arrays sorting random

我有一个问题,希望有人能帮助我。

我正在尝试在Android Studio中制作自己的记忆游戏应用程序。

我创建了一个ImageButton数组(bArray),其中存储了所有按钮。在oncreate方法中,我得到一个for循环,为每个ImageButton提供一个随机标记。

在这些标签的帮助下,我为每个ImageButton分配了一个图像,但我只希望将一个图像分配两次,而不是三次。

所以我需要找到分配了两次以上的标签,并用其他标签替换它们。

我不知道该怎么做。我希望你能帮助我。如果您需要更多信息,请告诉我。

for(ImageButton b : bArray) {
    Random random = new Random();
    i_rndTag = random.nextInt(bilderArray.length);
    b.setTag(i_rndTag);
}

2 个答案:

答案 0 :(得分:0)

使用每个图像引用的一个副本(imageArray)填充数组。创建具有相同数量的项目的另一个数组(indexUsageArray)并存储所述图像的使用次数。验证使用数组的随机索引,如果使用次数等于2,再次运行randomizer并验证,直到有一个未使用过两次的索引。

    try {
        String TAG = "RandomGame";
        String[] imageArray =  {"bread.jpg","potatoe.jpg","eaters.jpg","earlobe.jpg","paintbrush.jpg"};
        int counterMax = imageArray.length;
        int[] indexUsageArray = new int[counterMax];
        // there are 2 copies of each image
        String[] imageToDisplayAtPosition = new String[2*counterMax];
        Random random;
        int randomIntTemp = 0;
        for (int i=0;i<counterMax;) { // only increase i AFTER completed attempt at randomization assignement
            random  = new Random();
            randomIntTemp = random.nextInt(2*counterMax);
            if (indexUsageArray[i] < 2) {
                //Log.w(TAG,"randomIntTemp:["+randomIntTemp+"] i:["+i+"] indexUsageArray[i]:["+indexUsageArray[i]+"] imageToDisplayAtPosition:["+imageToDisplayAtPosition[randomIntTemp]+"]");
                if (imageToDisplayAtPosition[randomIntTemp] ==  null) {
                    imageToDisplayAtPosition[randomIntTemp] = imageArray[i];
                    indexUsageArray[i]++;
                } // try another random position for same image
            } else { // assigned both positions, move to next image
                i++;
            }
        }
        Log.w(TAG,"Assignments");
        for (int j=0;j<2*counterMax;j++) {
            Log.w(TAG,"j:["+j+"] image:["+imageToDisplayAtPosition[j]+"]");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

导致(例如):

j:[0] image:[earlobe.jpg]
j:[1] image:[eaters.jpg]
j:[2] image:[potatoe.jpg]
j:[3] image:[eaters.jpg]
j:[4] image:[earlobe.jpg]
j:[5] image:[bread.jpg]
j:[6] image:[paintbrush.jpg]
j:[7] image:[potatoe.jpg]
j:[8] image:[paintbrush.jpg]
j:[9] image:[bread.jpg]

答案 1 :(得分:-1)

也许你使用自己的班级:

class CustomImageButton {

 private int count;
 private ImageButton imageButton;
 private final int range = 32;

 public CustomImageButton() {
    imageButton = new ImageButton;
 }

 public void setTag() {
   if (count < 2) {
    imageButton.setTag(new Random().nextInt(range));
    count++;
  }
  return;
 }

}