缺少数组的元素

时间:2017-02-10 23:30:25

标签: java arrays multidimensional-array

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

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?

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是在将tab2复制到新数组之前用{0}填充所需的零。

int[][] tab1 = new int[][] {{1,2,3}, {1,2,3}};
int[][] tab2 = new int[][] {{1,2,0}, {1,2,0}}; // pad with trailing zeros
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 :(得分:1)

你不能“将缺失的元素设置为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]]

答案 2 :(得分:0)

让maxLength成为数组的最大值(lenth),现在所有ohers数组都用0填充它们,直到达到maxLength,

Ex:maxLenth = 3,你有一个长度为2的行的数组,那么你只需要在每行的末尾添加1个zeo。