2015-04-06 24 views
0

我正在編寫一個程序,該程序會根據隨機生成器的值,將一個粒子移動到左,右,上,下,向後或向前。程序。粒子能夠以尺寸爲LxLxL的立方體移動。我希望當粒子已經到達所有可能的場地並且輸出跳躍次數時程序停止。依賴於3D陣列的IF循環的結束條件

目前我正在使用數組[i] [j] [k]來做這件事,當粒子到達某個位置時,將該對應點處的數組值改爲0.但是,在我的IF循環我必須輸出i,j和k的所有可能組合,以表示它們是否都等於0,程序應該結束。會有更好的方法來做到這一點?

感謝, 貝絲

回答

1

是的。我假設if是一個包含在三重嵌套循環中的身體集finish=1;。這樣做的更好方法是在循環之前設置一個標誌,從一個真值開始,然後將其設置爲假,如果遇到除零之外的值,則打破該標誌。你的if語句變得簡單得多,就像這樣;

int finish =1; // start with a true value 

//loops are untouched so still got the for i and for j above this 
for(k = 0; k < 15; k++) 
{ 
    if (list[i][j][k] != 0) 
    { 
     finish = 0; 
     break; 
    } 
} 

// outside all the loops 
return finish; 

我認爲這是你要求的,但如果不是,請編輯你的問題來澄清。我不確定這個概念是否有一些技術名稱,但我們的想法是根據最有效的方式選擇您的初始真值。假設你有一個15x15x15的數組,並且一個非零值意味着假,那麼只要你遇到一個使你的語句錯誤的值,就以真和假開始。試圖走向另一個方向要複雜得多,而且效率要低得多。

+0

謝謝,這就是我之後的:) – Bethan

0

也許你可以添加你list[i][j][k]每一次list[i][j][k]=0的集合。然後在程序結束時檢查收藏的長度。如果它的長度正確,則終止。

+0

或者使用一個計數器,只有當a)一個單元格被輸入並且b)'list [i] [j] [k] == 0'時,該計數器纔會增加,這大大減少了內存消耗。比較計數器和單元格的總數,以確定您是否在任何地方。這與Minh的回答原則上相同 – antipattern