簡體   English   中英

if語句中的條件始終為true

[英]the condition in if statement is always true

我是這種語言的新手,在我工作時,我無法弄清楚為什么條件始終為假,而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;
  }

我用^^^^標記注釋了代碼中的關鍵部分,以演示事物的流程:

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;
  }

現在,當您將整數添加到numbers ,將不會擦除它們,因為您每次調用該方法時都要重新實例化數字。 同樣,使用過的照片數量也不會在類似的庄園中重設。

您將需要使用while循環來確保您具有唯一值。

我還將方法的轉義值從0更改為-1,因此在已經使用完每張圖片的情況下,您不會意外返回第一個索引圖片。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM