我有一个问题,希望有人能帮助我。
我正在尝试在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);
}
答案 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;
}
}