Вы перебираете символы от младшей значащей цифры к самой значимой (хотя вы пропускаете самую значимую цифру), но по какой-то причине вы всегда проверяете, является ли последний символ «1», вместо проверки текущего символа.
Используя код, похожий на ваш цикл, я предлагаю:
int result = 0;
int a = 1;
for (int i = binary.length() - 1; i >= 0; i--) {
if (binary.charAt(i) == '1') {
result += a; // this adds 2^k to the result for each '1' digit, since a is initialized
// to 2^0 and is multiplied by 2 in each iteration
}
a *= 2;
}
Например, если binary
инициализировано как "10010011", result
равно 147
.