我已经在这个问题上停留了几个小时了。我已经注释掉了所有代码,认为这与数组越界有关,但这仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并在以后使用哈希码获取该数据。但是哈希值会不断变化。
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;
}
对于文件,即使每行都有相同的东西,仍然存在此问题
前任。
你好
你好
你好
我已经注释掉了所有其他函数,除了获取数据并对其进行哈希处理,但不确定为什么哈希码具有不同的值。我是否错误地使用了哈希代码?有没有其他方法可以做到这一点?
编辑* 当我在主函数中对字符串进行哈希处理时,值始终相同,但我检索的值从未相同。
问题是这一行:
int get = arr.toString().hashCode();
你期望 arr.toString() 返回 char[] 中的字符串。其实不然。
From Object.toString():
类 Object 的 toString 方法返回一个字符串,该字符串由 对象是其实例的类的名称,即 at-sign 字符"@",以及哈希的无符号十六进制表示形式 对象的代码。换句话说,此方法返回一个相等的字符串 值为: getClass().getName() + '@' + Integer.toHexString(hashCode())
所以 arr.toString() 返回类似 "[C@3e25a5" 的东西,其值每次都会改变,其 hashCode() 也会随之改变。
而不是 arr.toString()
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#toString(字符[])
是的,每次都会打印出同样的东西。您的方法是打印键的哈希代码,这不是函数参数。所以大概你在代码中的某个地方定义了它,你还没有向我们展示......为什么它的哈希码应该改变?