2017-07-20 14 views
0

私はこの言語を初めて使っています。私が働いていたときに、条件が常に偽であり、ifステートメントが機能していないように見えませんでした。私はアンドロイドスタジオでランダムな画像を生成しようとしていますが、繰り返しはありません。ifステートメントの条件は常にtrueです

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

おそらく 'numbers'が空であるためですか? ;) – alfasin

+2

'return mImageIds [select];'はループを壊します。 –

答えて

1

このソリューションは、あなたの問題を解決する必要があります。

あなたが最初にあなたがnumbersに整数を追加するときに、数字にあなたがメソッドを呼び出したびに再インスタンスれたとして、彼らは拭かれることはありません

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に変更したので、既にすべてのピクチャを使用している場合に誤って最初のインデックス付きピクチャが返されることはありません。

+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; 
+0

このような良い説明をありがとう –

+1

@SachinGarg [回答を受け入れてください](https://meta.stackexchange.com/questions/5234/howこの回答があなたのために問題を解決した場合は、回答を受け入れます)。 – EJoshuaS

関連する問題