Основная проблема с вашим кодом заключается в передаче binaryStr.substring (index++)
рекурсивному вызову, который передает исходную String
вместо подстроки.Следовательно, вы получаете бесконечную рекурсию.Вы можете использовать ++index
.
Вместо использования static
переменных, я предлагаю следующее:
private static int parity(String binaryStr) {
if (binaryStr.length() == 0) {
return 0;
} else {
return ((binaryStr.charAt(0) == '0') ? 0 : 1) ^ parity(binaryStr.substring(1));
}
}
Объяснение:
Если два операнда бита -если XOR (^) равны, он возвращает 0. Если один операнд равен 0, а другой равен 1, он возвращает 1.
Это именно та логика, которая вам нужна:
Если первый символравен '1', а остаток String
имеет четность 1 (т. е. нечетное число '1'), четность всего String
равна 0.
Если первый символ равен '1' ирезультат String
имеет четность 0 (т. е. четное число '1' s, the whole
String` четность равно 1.
Если первый символ равен '0', четность всего String
равен паритету остальных String
.