遇到无限循环(Running into an infinite while loop)
我在这里遇到了一个无限循环。 我需要帮助找到一个边缘案例,我可能没有考虑过。
table是(键,值)对的数组。 isRemoved()标记表的元素(如果已删除)。
index是从'key'的散列函数派生的......这里我试图在哈希表中添加一个元素。
int removed = -1; while (table[index] != null) { if (table[index].isRemoved()) { if (removed != -1) { removed = index; } } else { if (key.equals(table[index].getKey())) { dData = table[index].getValue(); table[index].setValue(value); return dData; } else { index++; index %= startingSize; } } } if (removed != -1) { index = removed; }I'm running into an infinite loop here. I need help finding an edge case here, that I might not have considered.
table is an array of (key, value) pairs. isRemoved() flags an element of table, if it has been removed.
index is derived from the hashing function of 'key'... Here I'm trying to add an element to the hash table.
int removed = -1; while (table[index] != null) { if (table[index].isRemoved()) { if (removed != -1) { removed = index; } } else { if (key.equals(table[index].getKey())) { dData = table[index].getValue(); table[index].setValue(value); return dData; } else { index++; index %= startingSize; } } } if (removed != -1) { index = removed; }最满意答案
您的逻辑不是添加元素,而是更新现有值。 此外,你有一个循环逻辑。 摆脱“index%= startingSize;” 当索引达到表大小时,您确定表[index]将为null吗? Your logic is not adding an element but updating an existing value. Also, you have a circular logic. Get rid of "index %= startingSize;" Are you certain that the table[index] will be null when index reaches the table size?更多推荐
发布评论