Java数组元素覆盖问题:如何避免sourceArray被重复赋值?
解决sourceArray元素被覆盖的方案
问题根源
你当前用**账户ID(变量i)**计算sourceArray的写入索引(i+j-1),这是错误的核心原因:
- i是账户的编号(比如0、2),不是已经写入sourceArray的元素总数;
- 当账户ID跳变(比如从0直接到2),或某个账户无数据(比如i=1),计算出的索引会和之前写入的位置重叠,直接覆盖已有数据。
举个调试里的例子:
- i=0,j=3时,索引为
0+3-1=2,存入了值39; - i=2,j=1时,索引为
2+1-1=2,存入值9,直接覆盖了之前的39。
修复方案
改用一个独立的写入位置指针,跟踪sourceArray当前的空闲位置,按顺序写入所有数据,完全和账户ID脱钩:
修改后的代码示例
// 初始化写入位置指针,从数组起始位置开始 int currentPos = 0; for (int i = 0; i < num_accounts; ++i) { ... // 这里是读取当前账户对应elm数组的逻辑 // 如果当前账户只有ID(无数据),直接跳过 if (elm.length <= 1) { continue; } for (int j = 1; j < elm.length; ++j) { int src = Integer.parseInt(elm[j]); // 写入当前空闲位置,然后指针后移 sourceArray[currentPos] = src; currentPos++; // 可选:调试信息,查看当前写入的位置和值 System.out.println("DEBUG: 写入索引" + (currentPos-1) + ",值=" + src); } }
额外防护(可选)
如果担心数组容量不足导致越界,可以添加判断:
if (currentPos >= sourceArray.length) { throw new IllegalStateException("sourceArray容量不足,无法继续写入数据"); }
逻辑说明
你的需求是把文件中所有账户的附属数据(每行第一个元素之后的内容)依次存入sourceArray,不需要关联账户ID到数组索引。用currentPos顺序写入,就能保证每个数据都存在新的空闲位置,彻底避免覆盖问题。
内容的提问来源于stack exchange,提问作者Sarah Carter
相关产品推荐
相关产品推荐

