2012-04-30 5 views
2

私はこの問題に数時間悩まされています。私はすべてのコードが配列境界外のものと関係があると思っていたとコメントしましたが、これはまだ起こっています。私はスキャナを使ってファイルから入力を読み込み、データを保存し、後でそのデータをハッシュコードを使って取得しようとしています。しかし、ハッシュ値は変わり続ける。ファイルのJava string.hashcode()で異なる値が返される

public static void main(String[] args) 
{ 
    //only prior code is to access data 
    char arr[] = new char[25]; 
    arr = readString.toCharArray(); 
    int y; 
    y = hash(arr); 
} 

public static int hash(char[] arr) 
{ 
    int get = arr.toString().hashCode(); 
    System.out.println(y); 
    return get; 
} 

、でもすべての行に同じことで、この問題
exが依然として存在しています。
ハロー
ハロー
こんにちは私は、データを取得し、それをハッシュする以外に他のすべての機能をコメントアウトが、ハッシュコードがdiffernt値を持っている理由はわからないました

。ハッシュコードを間違って使用していますか?これを行う別の方法がありますか?

編集*メインファンクション内でハッシュ文字列を使用すると、値は常に同じですが、取得する値は決して同じではありません。

+0

'key'は何ですか?私はそれが定義または設定されて表示されませんが、あなたはハッシュ()の最初の行にそれを使用している – CPerkins

+0

そして、xは何ですか? – arshajii

+0

なぜ、配列を作成してからすべての参照を削除するのですか? –

答えて

7

問題は、この行です:

int get = arr.toString().hashCode(); 

あなたがchar []内の文字列を返すために)(arr.toString期待しています。それはしません。

Object.toString()から

クラスオブジェクトのtoStringメソッドが の目的は、例えば、アットマーク 文字が '@」であるクラス名からなる文字列を返し、そしてオブジェクトのハッシュ コードの符号なし16進表現。換言すれば、この方法は、の値に 等しい文字列を戻します。 のgetClass + Integer.toHexString(ハッシュコード()) '@'()のgetName()+

だから()戻りarr.toString "[C @ 3e25a5"のように値が毎回変わり、その結果hashCode()も変化します。

+0

私はString temp = arr.toString();を持っています。 get = temp.hashCode();しかし、同じエラーがまだあります。 – MeowMeow

+0

はい、毎回tempの値を見てください。 :) –

+0

ありがとう、私はString temp = new String(record)を使用しています。これは以前のコードとまったく同じですが、上記のコードをhashcodeに渡しました。それは今働く。ありがとう。 – MeowMeow

0

はいこれは毎回同じことを印刷します。あなたのメソッドは、keyのhashCodeを出力しています。これは関数のパラメータではありません。おそらくあなたは私たちに示していないコードのどこかでこれを定義しています...なぜhashCodeが変わるべきですか?

+0

彼はそれが変わるとは思わないが、明らかに*それは*である。 – dlev

関連する問題