問題は解決しました (まだ回答を受け入れることができません。while ループを変更したところ、機能するようになりました。将来の視聴者のために以下に回答しました): ハッシュ アルゴリズムが原因で頭痛がします。キーのファイルから入力を読み取り、少量のキーでコードが機能します。300 ワードのようにすると、問題が発生します。ハッシュ関数は一番下にあり、この while ループはメイン関数の本体にあり、Java で記述されています。ハッシュ関数はうまく機能し、私がばかげて本体を変更して元のコードを失うまで、本体も同様に機能しました。オーバーフローの問題をカバーしたと思いますが、どんな助けでも大歓迎です、ありがとう!
tSize の計算方法:
//Calcking tSize
tSize = (int)(items*tSizeFactor);
//Making tSize prime
while(!isPrime((int)tSize))
tSize++;
ファイルから読み取るときの while ループ:
while(line != null) {
//Getting the address to place the value in
position = hash(line.toCharArray(), (int)tSize);
//If there is something there we enter the if statement
if(hashTable[position][0] != null) {
//while we haven't found a spot and i < tableSize we update the last position we were at and move through the array
for(int i = 1; i < (int)tSize && hashTable[position][0] != null; i++) {
//prevPosition is used to update the link in the spot just before our final destination, allows wrap around in the array
prevPosition = position;
//we add +i to the original position and modulo the table size allowing wrap around in the array
position = (position+i)%(int)tSize;
}
//finally when we found a spot we update the previous position to link to the new item
hashTable[prevPosition][1] = Integer.toString(position);
}
//Adding the values to the hash table and setting the link to -1
hashTable[position][0] = new String(line);
hashTable[position][1] = new String(Integer.toString(-1));
line = reader.readLine();
}
public static int hash(char ch[],final int TSIZE) {
int sum = 7;
for(int i = 0; i < ch.length; i++) {
sum = sum*31+ch[i];
sum <<= 3;
}
if(sum < 0)
sum *= -1;
return sum%TSIZE;
}