2015-11-13 106 views
-1

該程序的上下文是一個涉及釘和光盤的遊戲。用戶輸入掛釘數量(最多20個)和每個掛釘上的光盤數量(最多10個)。由於有足夠的光盤可以移除,所以兩名玩家每次在一個釘上去掉任意數量的光盤。刪除最後一張光盤的播放器丟失。如何檢查一個數組的所有值是否等於0?

光盤的數量存儲在一個數組中,其中數組的索引與掛鉤編號相對應。我有一個布爾函數來檢查插銷是否是空的光盤,暗示有人贏了。有一個在我的代碼中的一些邏輯上的錯誤,但我無法弄清楚它是什麼:

bool checkPegs(int array[], int size) 
{ 
    int checker(0); 
    for (int i = 0; i < size; i++) 
    { 
     if(array[i] = 0) 
     { 
     return true; 
     } 
     else 
     { 
     return false; 
     } 
    } 
} 
+2

'if(array [i] == 0)'而不是'if(array [i] = 0)'? –

+2

'='是賦值,並且要保持循環,直到第一個非零值或結束。 – molbdnilo

回答

1
bool checkPegs(int array[], int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     if(array[i] != 0) 
     { 
     return false; 
     } 
    } 
    return true; 
} 
+1

這不檢查數組中的最後一個元素。 – TartanLlama

+0

它不是'char'數組。 –

+0

@TartanLlama修正了,儘管我已經晚了近一年。 – 493msi

0
if(array[i] = 0) 

這並不比array[i]0,它分配0array[i]。你想要array[i] == 0

if(array[i] == 0) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

第二個問題是你只檢查第一個元素,然後根據它返回。您應該檢查每一個元素,以確保它們是非零:

for (int i = 0; i < size; i++) 
{ 
    if(array[i] != 0) { 
     return false; 
    } 
} 

最後,你不說size0處理此案。在這種情況下,您應該返回true

bool checkPegs(int array[], int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     if(array[i] != 0) { 
      return false; 
     } 
    } 

    return true; 
} 
0

這裏有兩個誤區

bool checkPegs(int array[], int size) 
{ 
    int checker(0); 
    for (int i = 0; i < size; i++) 
    { 
     if(array[i] = 0) // the first one use '==' instead of '=' 
     { 
     return true; // the second one, you are testing the first element only 
     } 
     else 
     { 
     return false; 
     } 
    } 
} 

這裏應該如何

bool checkPegs(int array[], int size) 
{ 

    for (int i = 0; i < size; i++) 
    { 
     if(array[i]) 
      return false; // return false at the first found 

    } 
    return true; //all elements checked 
} 
0

你寫你的代碼不能正常工作的方式,你實際上是隻考慮,因爲第一個元素if/else中的兩個return陳述。此外,您使用賦值語句而不是比較。

它遵循一個研討例:

bool checkPegs(int *array, int size) { 
    for (int i = 0; i < size; i++) { 
     if(array[i] != 0) { return false; } 
    } 
    return true; 
} 

請記住,它可以被優化,您可以使用標準的實用程序做同樣的,但我認爲你正在學習的代碼,所以它是值得寫它爲你自己。

相關問題