关于Java数组索引的疑问:多项式加法代码为何可行?
关于Polynomial类add方法数组索引操作的解惑
你的核心疑惑其实是两个点:数组元素是否设置后就不可变,以及为何两个if条件满足时能实现累加,下面直接拆解清楚:
int数组的默认初始化值
Java中新建int[]类型数组时,所有元素会被自动初始化为0。所以代码里int[] newPoly = new int[max];执行后,newPoly的每一个索引位置的初始值都是0,并非未定义状态。+=操作的本质
代码里的newPoly[i] += coefficients[i];等价于newPoly[i] = newPoly[i] + coefficients[i];:- 当第一个
if条件满足时,newPoly[i]初始是0,加上当前多项式的系数coefficients[i]后,就变成了该系数的值; - 如果第二个
if条件也满足(即当前索引i同时在两个多项式的数组范围内),此时newPoly[i]已经有了第一个多项式的系数值,再执行newPoly[i] += other.coefficients[i];,就是把两个多项式对应位置的系数做累加,完全符合多项式加法的逻辑。
- 当第一个
数组元素的可变性
int数组的元素是完全可变的,只要通过索引访问到元素,就可以随时修改它的值——不存在“设置后就不可变”的限制,除非你使用了不可变的包装类或特殊数据结构,但这里是基本类型int的数组,完全支持修改操作。
附上标注关键逻辑的代码:
public Polynomial add(Polynomial other){ int max = Math.max(coefficients.length, other.coefficients.length); int[] newPoly = new int[max]; // 所有元素默认初始化为0 for (int i=0; i<max; i++){ if (i<coefficients.length){ newPoly[i] += coefficients[i]; // 0 + 当前多项式系数 } if (i<other.coefficients.length){ newPoly[i] += other.coefficients[i]; // 已有值 + 另一个多项式系数 } } return new Polynomial(newPoly); }
内容的提问来源于stack exchange,提问作者Suleman Dawood
相关产品推荐
相关产品推荐

