You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:01:17