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

如何用while/for循环复制数组?Java代码复制失败输出null求原因

嘿,我来帮你搞定这两个技术问题!

问题1:如何用while或for循环将旧数组数据复制到新数组

不管是for还是while循环,核心逻辑都是遍历旧数组的每个元素,把它逐个赋值到新数组对应的位置上。我给你举两个简单的示例:

用for循环实现

// 假设旧数组是oldArr,新数组要保证长度足够容纳旧数组元素
String[] oldArr = {"a", "b", "c"};
String[] newArr = new String[oldArr.length];

for (int i = 0; i < oldArr.length; i++) {
    newArr[i] = oldArr[i]; // 逐个复制元素到新数组对应位置
}

用while循环实现

String[] oldArr = {"x", "y", "z"};
String[] newArr = new String[oldArr.length];

int i = 0;
while (i < oldArr.length) {
    newArr[i] = oldArr[i];
    i++; // 手动推进循环计数器
}
问题2:你的Java代码复制失败的原因分析

咱们把代码里的问题拆开来逐一梳理:

错误1:扩容逻辑触发时机完全错误

你现在每次调用add方法都会执行扩容(创建newElements),但实际上只有当数组已满(currsize == elements.length)时才需要扩容。当前写法会导致每次添加元素都重新创建空数组,之前的元素直接丢失!

错误2:循环里的赋值逻辑搞反了,根本没复制元素

你写的循环代码:

for (int i = 0; i < currsize; i++){
    elements = newElements;
}

这行代码是把空的newElements赋值给elements,循环多少次就重复赋值多少次,但完全没有把旧数组的元素复制到新数组里!正确的操作应该是把elements[i]的值赋给newElements[i]。

错误3:扩容后数组引用的赋值时机错误

就算你完成了元素复制,现在的逻辑是在循环里重复赋值数组引用,这完全没必要——应该在所有元素复制完成后,再把newElements赋值给elements。

修正后的代码

我给你调整好的版本,你可以参考:

public class StrList {
    // 补充你原代码缺失的成员变量定义
    private String[] elements = new String[10]; // 初始数组长度设为10
    private int currsize = 0;
    private String[] newElements;

    public void add(String y) {
        // 仅当数组满了才触发扩容
        if (currsize == elements.length) {
            int newSize = elements.length * 2;
            newElements = new String[newSize];
            // 把旧数组元素逐个复制到新数组
            for (int i = 0; i < currsize; i++) {
                newElements[i] = elements[i];
            }
            // 将原数组引用指向新数组
            elements = newElements;
            System.out.println("数组已扩容,新长度为:" + newSize);
        }
        // 添加新元素到数组末尾
        elements[currsize] = y;
        currsize++;
    }
}

这样修改后,数组会在容量不足时自动扩容,元素也能正确复制,不会再出现打印null的情况啦。

内容的提问来源于stack exchange,提问作者user9270836

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:51