2012-04-30 49 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; 
} 

的文件,甚至在每一行同樣的事情,仍然有這個問題
前。
你好
你好
你好

我已經註釋掉所有其他功能除了獲取數據和散列,但不知道爲什麼哈希碼具有不同的充的值。我使用hashcode不正確嗎?有沒有另一種方法來做到這一點?

編輯*當我在主函數內部對字符串進行散列操作時,值總是相同,但是我檢索到的值從來都不相同。

+0

什麼'key'?我沒有看到它的定義或設置,但你使用它的第一行hash() – CPerkins

+0

什麼是x? – arshajii

+0

爲什麼你創建一個數組,然後刪除所有對它的引用? –

回答

7

的問題是這一行:

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

你期待arr.toString()在的char []返回字符串。它沒有。

Object.toString()

Object類的toString方法返回由 其中物體是一個實例,所述-SIGN 字符'@」的類的名稱的字符串,並且無符號十六進制表示的散列 代碼的對象。換句話說,此方法返回一個字符串等於 到的值: 的getClass()的getName()+ '@' + Integer.toHexString(hashCode()方法)

所以arr.toString()返回就像「[C @ 3e25a5」,它的值每次都會改變,其hashCode()也會隨之改變。

+0

當我有String temp = arr.toString(); get = temp.hashCode();仍然有同樣的錯誤。 – MeowMeow

+0

是的,但看看每次的溫度值。 :) –

+0

非常感謝你,我已經使用了String temp = new String(record),我的代碼與前面的代碼完全一樣,但是上面提供了hashcode。它現在有效。謝謝。 – MeowMeow

0

是的,這是每次打印出相同的東西。你的方法是打印key的hashCode,它不是一個函數參數。所以大概你已經在代碼中定義了這個地方,你還沒有向我們展示過......爲什麼它的hashCode應該改變?

+0

他不指望它改變,但顯然*它是*。 – dlev