2017-02-10 3 views
1

У меня есть небольшая проблема, у меня есть две одномерные массивы:недостающие элементы массива

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?

ответ

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]] 
1

Простейшим решением является прокладка tab2 с нулевыми нулями перед их копированием в новый массив.

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)); 
0

пусть MAXLENGTH быть maximul Lenth (Lenth из ряда) ваших массивов, теперь для всех ohers массивы заполнить их с 0 до тех пор пока вы достигнете MAXLENGTH,

Ex: maxLenth = 3, и у вас есть массив с строками длиной 2, то вам нужно только добавить 1 zeo в конце каждой строки.