2017-02-10 7 views
1

I kleines Problem, ich habe zweidimensionale Anordnungen:fehlende Elemente des Arrays

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

Jetzt habe ich die Arrays an den dritten Array zu verbinden, und fehlende Elemente in einer Reihe auf Null gesetzt:

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

Mein Code:

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

OUTPUT

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

Wie kann ich fehlende Elemente auf 0 setzen?

Antwort

1

Sie können "fehlende Elemente nicht auf 0 setzen", weil sie ... fehlen.

Denken Sie daran, dass Java-Arrays eine feste Größe haben, sodass Sie ein Array nicht länger machen können. Sie müssen ein neues längeres Array erstellen und die Werte kopieren. Glücklicherweise hat die Java-Bibliothek dafür eine Methode namens Arrays.copyOf(int[] original, int newLength). Sie müssen nicht einmal mit Nullen füllen, da dies der Standardwert ist.

So scannen Sie zuerst Ihr Ergebnisarray tab für die längste Zeilenlänge und ordnen Sie dann alle kurzen Zeilen neu zu.

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

Ausgabe

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

Die einfachste Lösung wäre, tab2 mit den erforderlichen Nullen zu füllen, bevor sie in das neue Array kopiert werden.

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

let maxLength sein die maximul lenth (lenth einer Zeile) Ihrer Arrays, jetzt für alle ohers Arrays sie füllen mit 0 bis Sie maxLength erreichen,

Ex: maxLenth = 3, und Sie haben ein Array mit Zeilen der Länge 2, dann müssen Sie nur 1 Zeo am Ende jeder Zeile hinzufügen.

Verwandte Themen