Java if语句中的条件始终为true
我不熟悉这种语言,当我工作时,我无法理解为什么条件总是错误的,if语句似乎不起作用。我试图在android studio中生成随机图像,但不重复Java if语句中的条件始终为true,java,android,Java,Android,我不熟悉这种语言,当我工作时,我无法理解为什么条件总是错误的,if语句似乎不起作用。我试图在android studio中生成随机图像,但不重复 private int getRandomImage() { int count = 0; int select; Random r = new Random(); List<Integer> numbers = new ArrayList<>(); while (count &
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;
}
我用^^^^^标记对代码中的关键部分进行了注释,以演示事物的流程:
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;
我用^^^^^标记对代码中的关键部分进行了注释,以演示事物的流程:
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;
这个解决方案应该能解决你的问题 首先,您需要在方法范围之外定义一些字段
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;
}
现在,当您将整数添加到数字时,它们不会被擦除,因为您每次调用该方法时都要重新实例化数字。此外,在类似的庄园中,您使用的图片数量也不会重置
您需要使用while循环来确保具有唯一的值
我还将该方法的转义值从0更改为-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;
}
现在,当您将整数添加到数字时,它们不会被擦除,因为您每次调用该方法时都要重新实例化数字。此外,在类似的庄园中,您使用的图片数量也不会重置
您需要使用while循环来确保具有唯一的值
我还将该方法的转义值从0更改为-1,这样在您已经使用了所有图片的情况下,您就不会意外返回第一张索引图片。可能是因为数字为空;返回mImageIds[选择];会不会因为数字是空的而打破循环;返回mImageIds[选择];谢谢你这么好的解释谢谢你这么好的解释