Линия
int j = liczba.charAt(i) - 47;
Вычитание код символа из (I + 1) -го символа liczba
по 47. Ссылаясь на ASCII table, 47 карт с "/", чьи ASCII-код на единицу меньше чем «0».
Обратите внимание, что я предполагаю следующее, так как ваш код находится на Java.
- Строка индексов начинается с нуля, т.е. первый символ имеет индекс 0, второй символ имеет индекс 1, и так далее
- Кажется, что символы и целые числа могут быть использованы взаимозаменяемо, так как символ внутренне представлен целым числом , а именно код ASCII символа.
- Тем не менее,
char
тип фактически целочисленный тип, с меньшим диапазоном
Следовательно, этот код, чтобы включить символы «0» до целого числа 1, «1» до целого числа 2, и т.д.
Например, когда первый символ (liczba.charAt(0)
) является символом 0
, liczba.charAt(0)
возвращает символ '0'
, который также равен числу 48
- потому что '0'
имеет ASCII-код 48.
Вычитание 48 с 47 получает 1, поэтому было бы преобразовать символ «0
» в целом число 1.
Однако, кажется, что этот код может вызвать индекс массива из погрешности оценок (предполагая индексы массива нулевой основы). когда цифра равна '9'
, эта строка возвращает 10. Это приведет к вышеупомянутой ошибке. Если массив языка этого кода не основан на 1. Однако даже в этом случае эта линия
int count = digits[0];
просто потерпит неудачу. Этот код, кажется, не в состоянии с общим Off by one error
Я считаю, эта линия должна на самом деле читать
int j = liczba.charAt(i) - 48;
так, что символ '0'
преобразуется номер 0.
Если это по-прежнему беспокоить вас, вы можете изменить эта линия до
int j = liczba.charAt(i) - '0';
поэтому было бы яснее. Вычтите код '1'
, а код '0'
доставит вам целое число 1, достаточно ясно :)
Не забудьте пометить его языком, который вы используете. –