2

私はこの問題で数時間立ち往生しています。配列の範囲外と関係があると考えてすべてのコードをコメントアウトしましたが、これはまだ発生しています。スキャナーを使用してファイルから入力を読み取り、データを保存し、後でハッシュコードを使用してそのデータを取得しようとしています。しかし、ハッシュ値は変化し続けます。

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; 
}

ファイルの場合、すべての行に同じものがあっても、この問題はまだあり
ます。
こんにちは
こんにちは
こんにちは

データを取得してハッシュすることを除いて、他のすべての関数をコメントアウトしましたが、ハッシュコードの値が異なる理由がわかりません。ハッシュコードを間違って使用していますか?これを行う別の方法はありますか?

編集*メインの関数内で文字列をハッシュすると、値は常に同じになりますが、取得する値が同じになることはありません。

4

3 に答える 3

7

問題はこの行です:

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

arr.toString()がchar[]の文字列を返すことを期待しています。そうではありません。

Object.toString()から:

クラスObjectのtoStringメソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@'、およびオブジェクトのハッシュコードの符号なし16進表現で構成される文字列を返します。つまり、このメソッドは次の値に等しい文字列を返します。getClass()。getName()+'@' + Integer.toHexString(hashCode())

したがって、arr.toString()は「[C @ 3e25a5」のようなものを返します。この値は毎回変更され、その結果、hashCode()も変更されます。

于 2012-04-30T19:42:53.757 に答える
1

arr.toString()の代わりにArrays.toString(arr)を使用する必要があります

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#toString(char [])

于 2012-04-30T19:44:39.523 に答える
0

はい、これは毎回同じものを印刷する予定です。メソッドは、関数パラメーターではないキーのhashCodeを出力しています。おそらく、あなたはこれをあなたが私たちに示さなかったコードのどこかで定義したでしょう...なぜそのhashCodeを変更する必要があるのですか?

于 2012-04-30T19:39:01.103 に答える