Java数组元素位置与position变量不匹配问题求解
首先咱们得捋清楚问题根源:你用的data[position++] = 1是后置自增运算符,它的执行逻辑是先拿当前position的值当索引给数组赋值,完成后再把position加1。所以你赋值的是索引0,之后position变成1,自然data[position]取到的是索引1的初始值0。
要实现“赋值后data[position]能返回刚添加的字节”——也就是让元素的索引和最终的position值一致,有两种实用的解决方案:
方案1:使用前置自增运算符(++position)
前置自增会先把position加1,再用新值作为索引赋值,刚好能让赋值的索引和最终的position完全匹配。
举个例子:
data = [0, 0, 0] position = 0 # 执行添加字节操作 data[++position] = 1
执行后数组变成data = [0, 1, 0],position = 1,此时data[position]就能返回1了。
如果你的需求是从数组索引0开始存储元素,同时让position指向刚存储的元素,那可以把初始position设为-1:
data = [0, 0, 0] position = -1 data[++position] = 1
执行后data = [1, 0, 0],position = 0,data[position]直接返回1,完美适配从索引0开始存储的场景。
方案2:调整赋值与自增的逻辑(冗余但适配特定场景)
如果非要保持初始position为0,且第一个元素存在索引0,同时让position最终指向该元素,也可以先赋值再调整position(不过这种方式不如方案1优雅):
data = [0, 0, 0] position = 0 data[position] = 1 # 先按需求自增,再回退到当前元素的索引 position += 1 position -= 1
显然这种方式有点多此一举,优先选方案1更合理。
额外说明
通常在这类数组存储场景中,position的默认语义是下一个要插入的位置,这时候用后置自增position++是标准写法——比如连续添加元素时:
data[position++] = 1 # 索引0,position=1 data[position++] = 2 # 索引1,position=2 data[position++] = 3 # 索引2,position=3
这样数组会被依次填满,position始终指向下一个空位。但如果你的业务逻辑需要position指向刚插入的元素,那调整成前置自增(配合合适的初始值)就是最直接的解决办法。
内容的提问来源于stack exchange,提问作者Java Swd

