我是这种语言的新手,因为我正在工作,我无法弄清楚为什么条件总是假的,if语句似乎不起作用。我试图在android studio中生成随机图像,但没有重复。
private int getRandomImage()
{
int count = 0;
int select;
Random r = new Random();
List<Integer> numbers = new ArrayList<>();
while (count < mImageIds.length) {
select = r.nextInt(mImageIds.length);
if (!numbers.contains(select)) {
numbers.add(select);
count++;
return mImageIds[select];
}
}
return 0;
}
答案 0 :(得分:4)
我使用^^^^
标记对代码中的关键部分进行了注释,以演示事物的流程:
List<Integer> numbers = new ArrayList<>();
^^^^^^^^^^^^^^^^^^^^^^^^^^^ -> numbers is empty
while (count < mImageIds.length) {
select = r.nextInt(mImageIds.length);
if (!numbers.contains(select)) {
^^^^^^^^^^^^^^^^^ numbers is empty -> does not contain select -> true
numbers.add(select);
count++;
return mImageIds[select];
^^^^^^ -> leaving the function, the if-statement above will not be reached again
}
}
return 0;
答案 1 :(得分:1)
此解决方案可以解决您的问题。
您首先要定义方法范围之外的一些字段
Random r = new Random();
List<Integer> numbers = new ArrayList<>();
int count = 0;
private int getRandomImage() {
int select;
if (count < mImageIds.length) {
select = r.nextInt(mImageIds.length);
while(numbers.contains(select)) {
select = r.nextInt(mImageIds.length);
}
numbers.add(select);
count++;
return mImageIds[select];
}
return -1;
}
现在,当您将整数添加到numbers
时,每次调用方法时都不会擦除重复数字。此外,您使用的图片数量也不会在类似的庄园中重置。
您需要使用while循环来确保您具有唯一值。
我还将方法的转义值从0更改为-1,因此在您已经使用过每张图片的情况下,您不会意外地返回第一张索引图片。