私はプロジェクトをやっています。私はjavaで本当に単純なハッシュ関数を持っています。はそれぞれ "data"(これはString型かDouble型ファイルごとに読み込む)文字を入力し、ハッシュコードとして使用されるそれらの値の合計を作成します。 私は各文字を16進数に変換し、得られたStringを "デコード"または "parseInt"することができたとは思っていましたが、機能しません。ここでHex javaでハッシュ関数の文字列を読み取ることができません
は私の方法である:
public long HashFunction(T data){
String bytes = data.toString();
int value=0;
for (int i=0; i<bytes.length(); i++)
value = value + Integer.decode(Integer.toHexString(bytes.charAt(i) | 0x100000).substring(1));
return (value%1583)%(size);
//1583 prime number not near to the power of 2, size is the size of the array of my hashtable
}
そして、ここでは私の誤りで、0038は "8" でなければなりません:
Exception in thread "main" java.lang.NumberFormatException: For input string: "0038"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at java.lang.Integer.decode(Unknown Source)
at dizionario_package.HashTable.HashFunction(HashTable.java:22)
at dizionario_package.HashTable.HashInsert(HashTable.java:29)
at dizionario_package.RecordReader.CreateHTFromFile(RecordReader.java:24)
at dizionario_package.proviamo.main(proviamo.java:8)
また、私はエラーがこの機能であることを確信していますなぜなら、もし私がjavaのhashcodeメソッドを使うと、それは動作するからです。
ありがとうございます。
出力が8と予想される入力値は何ですか? – Sanjeev