Опитвам се да направя изчислението на хеш-кода ръчно на низ, тъй като казва формулата за хеш-код на низ като " 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 преобразува байт в 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