我不理解以下代码的% comment.length
位:
comment.charAt(i % comment.length())
括号之间的部分是否会转换为一个整数,其值与注释长度相关,代表i
?
例如,如果:
comment = "test"
i = 2
comment.charAt(i % comment.length())
会是什么?
答案 0 :(得分:6)
%是模运算符,因此对于您的示例i % comment.length()
将解析为2 % 4 = 2
。这将返回第三个字符(在索引2处)。
对于i >= comment.length()
的情况,模运算似乎是一种安全措施。
请考虑以下情况:i = 11
和comment = "test"
。
如果你只使用comment.chatAt(i)
,你会得到一个例外,因为只有4个字符。模运算将包围它并导致11 % 4 = 3
并在这种情况下返回第四个字符(索引3)。
答案 1 :(得分:2)
%
是模运算符:它为您提供整数除法的余数
10 % 3 = 1
为10 / 3 = 3
,其余为1
您的语句只是确保函数参数小于字符串长度。
但是我宁愿以另一种方式检查这个问题。在字符串长10个字符中请求第11位的字符并在第1位获取字符而不是警告或错误消息是非常违反直觉的。