gpt4 book ai didi

java - 数组缺少元素

转载 作者:行者123 更新时间:2023-11-30 02:39:27 24 4
gpt4 key购买 nike

我有一个小问题,我有二维数组:

Tab1 = {1,2,3} {1,2,3} 
Tab2 = {1,2} {1,2}

现在我必须将数组连接到第三个数组,并将行中缺少的元素设置为零:

Tab3 ={1,2,3} {1,2,3} {1,2,0} {1,2,0}

我的代码:

    int[][] tab1 = new int[][]{{1,2,3},{1,2,3}};
int[][] tab2 = new int[][] {{1,2},{1,2}};
int[][] tab = new int[tab1.length+tab2.length][];
System.arraycopy(tab1,0,tab,0,tab1.length);
System.arraycopy(tab2, 0, tab, tab1.length,tab2.length);

System.out.println(Arrays.deepToString(tab));

输出

[1, 2, 3], [1, 2, 3], [1, 2], [1, 2]

如何将缺失元素设置为 0?

最佳答案

您不能“将缺失的元素设置为 0”,因为它们......缺失

请记住,Java 数组是固定大小的,因此您不能使数组变得更长。您必须创建一个新的更长的数组并将值复制过来。幸运的是,Java 库有一个名为 Arrays.copyOf(int[] original, int newLength) 的方法。 。您甚至不必填充零,因为这是默认值。

因此,首先扫描结果数组 tab 以获得最长的行长度,然后重新分配所有短行。

// Your code (unchanged, but reformatted a bit)
int[][] tab1 = { {1,2,3}, {1,2,3} };
int[][] tab2 = { {1,2}, {1,2} };
int[][] tab = new int[tab1.length + tab2.length][];
System.arraycopy(tab1, 0, tab, 0, tab1.length);
System.arraycopy(tab2, 0, tab, tab1.length, tab2.length);

// Extend short rows
int rowLen = 0;
for (int[] row : tab)
if (row.length > rowLen)
rowLen = row.length;
for (int i = 0; i < tab.length; i++)
if (tab[i].length < rowLen)
tab[i] = Arrays.copyOf(tab[i], rowLen);

// Print result
System.out.println(Arrays.deepToString(tab));

输出

[[1, 2, 3], [1, 2, 3], [1, 2, 0], [1, 2, 0]]

关于java - 数组缺少元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42170369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com