Я пытаюсь выполнить вычисление хэш-кода вручную для строки, поскольку в нем говорится, что формула для строкового хэш-кода выглядит как «s[0]*31^(n-1) + s[1]*31^(n-2) +... + s[n-1]", как показано ниже
public static void main(String[] args) {
String str1 = new String("A");
double hc = 0;
for (int i = 0; i < str1.length(); i++) {
int iv = (byte) str1.charAt(i);
hc = hc + Math.pow((iv * 31), (str1.length() - 1 - i));
}
System.out.println(hc); // 1.0
System.out.println(str1.hashCode()); // 65
}
Значение «hc» равно 1,0, потому что java преобразует byte в значение int в соответствии с правилами. но ответ, который я ищу, - 65. Как скопировать значение байта как есть в переменную int.
hashCode()
в вашей среде IDE, и это должно привести вас к исходному коду. У вас будет ответ там. Нигде не сказано, что символы преобразуются в байты. Зачем ты это делаешь? - person JB Nizet   schedule 07.08.2019chars
шириной 16 бит. - person DodgyCodeException   schedule 07.08.2019String str1 = new String("A");
вы должны просто сделатьString str1 = "A";
. - person DodgyCodeException   schedule 07.08.2019String str1 = "A";
это не поможет, дает тот же результат, что и выше - person Murali   schedule 07.08.2019int value = s.charAt(i);
. Ваш алгоритм просто неверен. Посмотрите исходный код для правильного, простого алгоритма. - person JB Nizet   schedule 07.08.2019String str1 = "A";
был просто предложением более четкого и эффективного кода, а не ответом на решение вашей проблемы. - person DodgyCodeException   schedule 07.08.2019