Java编写histogram直方图方法时newArr[count]++运行逻辑求解释
Java直方图统计方法逻辑详解
else分支整体作用
进入else分支的前提是输入数组a的长度不小于参数M,这段代码的核心作用是统计数组a中0~M-1每个整数的出现次数,最终返回的newArr数组的下标对应被统计的数值,下标对应的元素值就是该数值的出现次数。
逐行逻辑拆解
else // 遍历输入数组a的每一个元素 for(int i = 0; i < a.length; i++){ // 取出当前遍历到的a数组元素值,作为要统计的目标数值 int count = a[i]; // 对应计数位+1 newArr[count] ++; }
newArr[count] ++运行原理解析
你在方法开头初始化newArr时用了int[] newArr = new int[M];,int类型数组初始化后所有元素默认值为0,这条语句可以拆分为3个执行步骤:
- 定位到
newArr数组中下标为count的存储位置 - 读取该位置当前存储的计数值
- 将计数值加1后重新存回该位置
本质就是每遍历到一个数值count,就把它对应的计数位累加1,最终统计出每个数值的出现频次
结合示例参数演示运行过程
你在main方法中传入的测试参数:
- 输入数组
w = {1,2,0,1,2,3} - 统计范围
M = 5,所以newArr初始值为[0,0,0,0,0]
遍历数组w的执行过程:
- 遍历到元素1:
newArr[1]++→newArr = [0,1,0,0,0] - 遍历到元素2:
newArr[2]++→newArr = [0,1,1,0,0] - 遍历到元素0:
newArr[0]++→newArr = [1,1,1,0,0] - 遍历到元素1:
newArr[1]++→newArr = [1,2,1,0,0] - 遍历到元素2:
newArr[2]++→newArr = [1,2,2,0,0] - 遍历到元素3:
newArr[3]++→newArr = [1,2,2,1,0]
最终程序输出的第二行就是上述最终数组值,对应0出现1次、1出现2次、2出现2次、3出现1次、4出现0次,和输入数组的数值分布完全匹配。
内容的提问来源于stack exchange,提问作者Emin-35
相关产品推荐
相关产品推荐

