循环内++frequency[responses[answer]]语句的工作原理问询
理解
++frequency[responses[answer]]的运行逻辑 嘿,别被这行代码的写法唬住啦,它根本不是嵌套数组,只是用一个数组的值当另一个数组的索引来操作元素而已,我一步步给你拆解开讲:
先明确已知的初始状态
frequency数组初始化是int [] frequency = new int [6];,这是个长度为6的数组,刚创建时所有元素默认都是0,也就是初始状态是[0, 0, 0, 0, 0, 0]responses数组是{1,2,3,4,4,4,4,4},一共8个元素- 循环
for (int answer=0; answer<responses.length; answer++)会从answer=0跑到answer=7,总共执行8次
拆解核心代码的执行顺序
++frequency[responses[answer]]是从内到外执行的,分三步:
- 先拿
responses[answer]:获取当前循环中responses数组第answer位的元素值 - 把这个值当作
frequency数组的索引,定位到frequency里对应的元素 - 最后对这个定位到的元素执行
++(自增1)操作
结合例子一步步走循环过程
我们逐个循环看frequency的变化:
- answer=0时:
responses[0]是1 → 找到frequency[1],自增1 →frequency变成[0, 1, 0, 0, 0, 0] - answer=1时:
responses[1]是2 → 找到frequency[2],自增1 →frequency变成[0, 1, 1, 0, 0, 0] - answer=2时:
responses[2]是3 → 找到frequency[3],自增1 →frequency变成[0, 1, 1, 1, 0, 0] - answer=3到7时:这5次循环里
responses[answer]都是4 → 每次都对frequency[4]自增1,累计加5次 → 最后frequency[4]变成5
循环结束后,frequency数组最终状态是[0, 1, 1, 1, 5, 0]——其实这就是在统计responses数组里每个数字的出现次数:数字1出现1次,2出现1次,3出现1次,4出现5次。
补充个小细节
Java数组索引是从0开始的,刚好你的responses元素是1-4,对应frequency的1-4索引位,完全不会出现数组越界的问题~
内容的提问来源于stack exchange,提问作者AHF
相关产品推荐
相关产品推荐

