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

1

hash_table[hashNum].count 루프를 종료하기에 충분하지 않다. hash_table[hashNum].datapString이 아니면 hash_table[hashNum].count에 관계없이 루프가 계속됩니다.

1

루프 상태가 hash_table[hashNum].count != 0 대신 hashNum != 0이어야한다고 생각합니다.

두 번째로, while 조건에 || 대신 &&이 있어야합니다.

이 질문에는 많은 정보가 빠져 있기 때문에 이것은 자연스러운 추측입니다.

관련 문제