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 (); } }
问题解答
核心问题分析
你当前的代码没实现将原数组元素复制到目标数组的逻辑,所以输出不符合预期:
- 原代码里,
int[] b = new int[a.length];只是创建了和a长度相同的数组,但Java新建int数组的默认元素都是0,所以第一个循环输出全0。 - 第二个循环错误输出了
c.length(也就是5)而非数组元素,所以重复输出5。 - 第三个循环输出的是二维数组
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
相关产品推荐
相关产品推荐

