2015-06-05 75 views
1

簡化,我基本上有一個if語句是這樣的:Java中,重複if語句,如果條件爲假

if(A[random]==1) 
    A[random]=0; 
else 
    continue; 

現在我知道了「繼續」是循環語句,這是行不通的,但我想要一些東西后,如果確實其他(基本條件是錯誤的)被激活它重複第一個if(A [random] == 1)語句。

+5

你也許正在尋找'while(!condition)'? – Wormbo

+2

這將終止條件是什麼?它應該在'A [random] == 1'之後終止嗎? – JPeroutek

+0

是的,當它發現數組中的位爲1時結束,並且在它改變爲0之後,if應該停止。 while語句,它會停止,如果它發現一位是0,不會改變任何東西 –

回答

1

你可以試試下面的遞歸代碼,看看這個決心的查詢

public class Test { 


public void continueIf(){ 
    if(A[random]==1) 
     A[random]=0; 
    else { 
     continueIf(); 
    } 
} 

public static void main(String[] args) { 
    new Test().continueIf(); 
} 
} 

請注意,如果,如果條件不那麼符合它會導致stackoverflowerror。這也取決於JVM內存的大小。請檢查此link以獲取有關stackoverflow錯誤的更多詳細信息。

+0

如果我錯了,請糾正我,但是這種方法會導致'StackOverflowException' 。它需要一個'return;',即使如此,邏輯也是錯誤的。 –

+0

我測試了它,它工作這是我想要的結果,感謝pise –

+0

@MirandaCode由@drewkennedy說,如果你的條件不滿足,那麼它可能會導致'java.lang.StackoverflowError'。 – pise

7

您可以使用while語句來代替:

while (A[random] != 1) { 
    A[random] = 0; 
    // generate a new random... 
} 
+0

這種方法的問題是我希望它只將數組中的一位從1更改爲0,並且如果隨機選擇的位是0,它不會改變任何東西 –

+2

@Mureinik OP的代碼應該在A [random] == 1被滿足。你的代碼正在做相反的事。它應該是A [random]!= 1。 – aa1992

+0

@ aa1992 urg的確如此。有一個'=='而不是'!='。固定。 – Mureinik

1

if/Else語句本身無法在循環數組時使用。我建議將它固定在For循環或While循環中。循環將搜索數組,if/else語句將檢查提供的條件的索引。我也會擺脫其他。你真的不需要這個部分只是如果。

一種在最基本的例子循環將是這個樣子:

for(var i = 0; i < SIZE; i++) 
     { 
      if (A[i] == 1) 
       A[i] = 0; 
     } 

大小將是你的數組的大小

+0

我需要它從A數組中隨機選擇一個值....考慮到這一點,我不能在for循環中實現它,並有A [i],有點擊敗目標 –

1
random = ...; // get first random number 
while (A[random] != 1) { 
    random = ...; // get new random number 
} 
A[random] = 0; // now is 1, switch it to 0 
1

這應該work.The其他答案已經描述而和遞歸,所以我 也增加了一個do while循環。

do{ 
    //generate the random number 
    }while(A[random]!=1)//The loop iterates till the condition A[random]!=1 is satisfied 
    A[random]==0;//changing the bit to 0 

請注意,如果在數組中沒有bit =1然後因爲你是隨機生成的索引該解決方案將失敗。 因此,如果陣列沒有element =1,那麼它會不斷檢查索引並生成infinite loop

希望它help.happy編碼!

+0

雖然這是正確的,但這個答案會有好處通過解釋爲什麼'do ... while'循環可以解決OP的問題,而不是隻包含代碼片段。 – JNYRanger

+0

@JNYRanger補充說明。 – aa1992