if语句中的条件始终为true

时间:2017-07-20 18:25:28

标签: java android

我是这种语言的新手,因为我正在工作,我无法弄清楚为什么条件总是假的,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;
  }

2 个答案:

答案 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,因此在您已经使用过每张图片的情况下,您不会意外地返回第一张索引图片。

相关问题