2011-05-11 79 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

其次,应该有&&而不是||在你的条件。

这些都是疯狂的猜测,因为在这个问题中缺少大量的信息。