我需要创建自己的HashCode()
方法来计算String
的HashCode。
到目前为止,我的代码看起来像这样
public long HashCode(String n){
long x = 0;
for(int i=0; i >= n.length()-1; i++){
x =+ 31^(n.length() -1) * n.charAt(i);
}
System.out.println(Long.toString(x));
return x;
}
我的println打印"0"
虽然它在for循环中被更改了。
有没有办法退回已更改的x
,而不是初始化的x=0
?
答案 0 :(得分:4)
i = 0; and i >= n.length()-1;
然后for循环永远不会被执行。
改为使用
for(int i=0; i < n.length(); i++)
答案 1 :(得分:1)
条件应为<=
而不是>=
for (int i = 0; i <= n.length() - 1; i++) {
x = +31 ^ (n.length() - 1) * n.charAt(i);
}
更多
for (int i = 0; i < n.length(); i++) {
x = +31 ^ (n.length() - 1) * n.charAt(i);
}
够了。
根据你的评论,“Cat”应返回67510 ,你的逻辑需要改变。
Check here,“猫”作为输入,您的代码生成247
答案 2 :(得分:0)
除了其他更正之外,看起来您打算使用+=
,而是代码说= +
x =+ 31^(n.length() -1) * n.charAt(i);
应该是
x += 31^(n.length() -1) * n.charAt(i);
答案 3 :(得分:0)
不应该是
for(int i=0; i <= n.length()-1; i++){
//OR
for(int i=0; i < n.length(); i++){
而不是
for(int i=0; i >= n.length()-1; i++){
答案 4 :(得分:0)
像这样更改您的代码
long x = 0;
for (int i = 0; i <= n.length() - 1; i++) {
x += 31 ^ (n.length() - 1) * n.charAt(i);
}
System.out.println(Long.toString(x));
您的情况有误,请尝试调试代码以找出问题所在