2016-05-14 3 views
0

私はプロジェクトをやっています。私は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メソッドを使うと、それは動作するからです。

ありがとうございます。

+0

出力が8と予想される入力値は何ですか? – Sanjeev

答えて

0

decodeには、16進数を使用している必要があります。文字列の先頭に0xを付けます。

value = Integer.decode("0x"+"10038".substring(1)); 
+0

ありがとうございます、<3 ありがとうございます。 – user3004162

+0

問題ありません。あなたが改善したいことを確信していない。それが壊れていない場合は、それを修正しないでください。 – GavinCattell

関連する問題