2011-05-11 76 views
0

我不知道爲什麼這個代碼不打破while循環:似乎無法打破碰撞while循環,哈希

int table_size = 953; 
store hash_table[953]; 
for(int i = 0; i < table_size; i++) 
    hash_table[i].count = 0; 

//bunch of stuff to get hash value here 

while(hash_table[hashNum].data != pString || hash_table[hashNum].count != 0){ 
    hashNum++; 
    if(hashNum > table_size) 
     hashNum = 0; 
    cout << hash_table[hashNum].count; 
    // to check the value of the count in the array, it IS 0, thus should have broken the loop 
} 

回答

1

你大概的意思:

while(hash_table[hashNum].data != pString && hash_table[hashNum].count != 0) 

在您的代碼中,如果任一情況屬實,則循環將繼續,hash_table[hashNum].count == 0不足以使該子句爲假。

+0

@ kingcong3:在''&&重視。目前,你的代碼說「如果其中任何一個都是真的,繼續下去」。相反,用&&'表示「如果其中任何一個都是錯誤的,停止」。 – Smashery 2011-05-11 04:36:17

1

hash_table[hashNum].count等於零,因爲使用的是||(「」)在終止測試兩個條件之間不足以終止循環。如果hash_table[hashNum].data不等於pString那麼無論hash_table[hashNum].count是什麼,循環都會繼續。

1

我認爲你的循環條件應該在hashNum != 0而不是hash_table[hashNum].count != 0

其次,應該有&&而不是||在你的條件。

這些都是瘋狂的猜測,因爲在這個問題中缺少大量的信息。