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

Java中如何将数组存入另一个数组?

问题描述

我想把数组存入另一个数组,最终输出数字:2, 7, 32, 8, 2。我是否需要以某种方式初始化值?试了多个循环但结果都不对,附上两段Java代码及输出,求帮忙。

原代码及输出

public class test
{
    public static void main(String[] args) {

        int[] a = {2, 7, 32, 8, 2}; 
        int[] b = new int[a.length];  
        int[] c = new int[b.length];  
        int[][] d = {b}; 

        for(int z = 0; z < b.length; z++){
            System.out.print(b[z] + " ");
        } 

        System.out.println();

        for(int y = 0; y < c.length; y++){
            System.out.print(c.length + " ");
        }

        System.out.println();

        for(int x = 0; x < d.length; x++){
            System.out.print(d.length + " ");
        }
    }
}

输出:

0 0 0 0 0
5 5 5 5 5
1

新代码

//NEW CODE
import java.util.*;

public class Main {

    public static void main (String[]args) {

        int[] arr1 = {1, 2, 3, 4 };
        int[] arr2 = {5, 6, 7, 8, 9};
        int[] arr3 = {10, 11, 12};
        int[] arr4 = {13, 14, 15, 16, 17};
        int[][] arrOfarrs = {arr1, arr2, arr3, arr4};
        int a[] = new int[arrOfarrs.length];

        for (int z = 0; z < arrOfarrs.length; z++) {
            System.out.print (Arrays.toString (arrOfarrs[z]) + " ");
            a[z] = arrOfarrs[z][z];
        }

        System.out.println ();
    }
}

问题解答

核心问题分析

你当前的代码没实现将原数组元素复制到目标数组的逻辑,所以输出不符合预期:

  1. 原代码里,int[] b = new int[a.length];只是创建了和a长度相同的数组,但Java新建int数组的默认元素都是0,所以第一个循环输出全0。
  2. 第二个循环错误输出了c.length(也就是5)而非数组元素,所以重复输出5。
  3. 第三个循环输出的是二维数组d的长度(1),因为d只包含一个数组b。

正确实现方式

要把数组a的元素存入另一个数组并输出目标序列,只需将原数组的每个元素复制到目标数组,或者直接遍历原数组输出(如果不需要保留目标数组的话)。以下是两种可行方案:

方案1:复制数组元素后输出

public class test {
    public static void main(String[] args) {
        int[] a = {2, 7, 32, 8, 2}; 
        int[] b = new int[a.length];  

        // 把a的元素逐个复制到b
        for(int z = 0; z < a.length; z++){
            b[z] = a[z];
        } 

        // 输出b的元素
        for(int z = 0; z < b.length; z++){
            System.out.print(b[z] + " ");
        } 
    }
}

输出:2 7 32 8 2

方案2:直接遍历原数组输出(无需额外数组)

如果不需要保留目标数组,直接遍历原数组即可:

public class test {
    public static void main(String[] args) {
        int[] a = {2, 7, 32, 8, 2}; 

        for(int num : a){
            System.out.print(num + " ");
        } 
    }
}

输出:2 7 32 8 2

关于初始化的说明

  • 用new int[length]创建数组时,Java会自动把所有元素初始化为0(int类型的默认值),但这不是你要的目标值,所以必须手动把原数组的元素赋值进去。
  • 如果直接写int[] b = a;,这只是让b指向a的内存地址,并非创建新数组,修改b的元素会同时改变a的元素,根据需求选择是否需要深拷贝。

新代码的潜在问题

新代码里a[z] = arrOfarrs[z][z];存在数组越界风险:比如arr3长度是3,当z=2时没问题,但如果后续有数组长度小于z+1,就会抛出ArrayIndexOutOfBoundsException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:35