Что делает comment.charAt (i% comment.length ())? - PullRequest
0 голосов
/ 25 января 2012

Я не понимаю бит % comment.length следующего кода:

comment.charAt(i % comment.length())

Преобразует ли часть в скобках целое число со значением, представляющим i относительно длины комментария?

Например, если:

comment = "test"
i = 2

что бы comment.charAt(i % comment.length()) было?

Ответы [ 2 ]

6 голосов
/ 25 января 2012

% является оператором по модулю, поэтому для вашего примера i % comment.length() разрешит до 2 % 4 = 2. Это вернет третий символ (с индексом 2).

Операция по модулю представляется защитной для случаев, когда i >= comment.length().

Рассмотрим следующий случай: i = 11 и comment = "test". Если вы просто используете comment.chatAt(i), вы получите исключение, поскольку в нем всего 4 символа. Операция по модулю обернет это и приведет к 11 % 4 = 3 и вернет четвертый символ (индекс 3) в этом случае.

2 голосов
/ 25 января 2012

% - оператор по модулю: он дает остаток от целочисленного деления

10 % 3 = 1

как 10 / 3 = 3 с остатком 1

Ваше утверждение просто гарантирует, что аргумент функции будет меньше длины строки.

Но Я бы лучше проверил это по-другому. Довольно нелогично просить символ в позиции 11 в строке длиной 10 символов и получать символ в позиции 1 вместо предупреждения или сообщения об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...