[英]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.