2017-03-03 18 views
0

i ein mehrdimensionales Array von Zeilen und Spalten kopieren möchten, die Zufallszahlen in ein anderes lokales Array enthält, sondern nur die Zeilen kopiert werden soll, das ist, was ich tat:Wie kopiert man ein mehrdimensionales Array in ein einzelnes Array?

arr = new int[rows][cols]; 
    for(int i = 0; i<arr.length; i++){ 
     for(int j = 0; j<arr[i].length;j++){ 
      arr[i][j] = (int)(range*Math.random()); 
     } 
public int[] getRow(int r){ 
    int copy[] = new int[arr.length]; 
    for(int i = 0; i<copy.length;i++) { 
     System.arraycopy(arr[i], 0, copy[i], 0, r); 
    } 
    return copy; 
} 
+1

Bitte fügen Sie einige weitere Informationen zu Ihrer Frage wie das, was zu erwarten ist, Zielplattform/Sprache usw. –

Antwort

0

Hier ist der richtige Weg, um die arraycopy zu verwenden:

int copy[] = new int[arr[r].length]; 
System.arraycopy(arr[r], 0, copy, 0, copy.length); 
return copy; 

einen kürzeren Weg, um den oben schreiben:

return Arrays.copyOf(arr[r], arr[r].length); 

Einen dritten Weg:

return arr[r].clone(); 

Alle drei Möglichkeiten haben das gleiche Ergebnis. Wie für die Geschwindigkeit, die ersten beiden Möglichkeiten können ein kleines bisschen schneller als der dritte Weg sein.

+0

Danke, es hat funktioniert !! – nir

0

System.arraycopy(arr[i], 0, copy[i], 0, r); ist falsch. arr[i] ist ein Array, copy[I] ist nicht. Ich habe keine Ahnung was r ist, aber irgendwie bezweifle ich, dass es die Anzahl der zu kopierenden Elemente ist. Sehen Sie in der Dokumentation unter http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#arraycopy-java.lang.Object-int-java.lang.Object-int-int- nach, was die Parameter sein sollten. Sie benötigen die Quell- und Zielarrays mit demselben Basistyp und beide mit Arrays. Die Länge des Zielarrays muss ausreichen, um die Anzahl der kopierten Elemente zu enthalten. Dies ist wahrscheinlich nicht die Anzahl der Zeilen in arr[][], die Sie zugewiesen haben.

0

int[][] stuff = {{1,2,3}, {4,5,6}, {7,8,9}}; 
 
for (int[] thing : stuff) println(thing); 
 
println(); 
 
    
 
int[][] myClone = stuff.clone(); // Cloning the outer dimension of the 2D array. 
 
for (int[] clone : myClone) println(clone); 
 
    
 
myClone[0][0] = 100; 
 
print('\n', stuff[0][0]); // Prints out 100. Not a real clone 
 
    
 
// In order to fix that, we must clone() each of its inner arrays too: 
 
for (int i = 0; i != myClone.length; myClone[i] = stuff[i++].clone()); 
 
    
 
myClone[0][0] = 200; 
 
println('\n', stuff[0][0]); // Still prints out previous 100 and not 200. 
 
// It's a full clone now and not reference alias 
 
    
 
exit();

0

Ich glaube, Sie wollen so etwas wie dieses

/** 
* Get a copy of row 'r' from the grid 'arr'. 
* Where 'arr' is a member variable of type 'int[][]'. 
* 
* @param r the index in the 'arr' 2 dimensional array 
* @return a copy of the row r 
*/ 
private int[] getRow(int r) { 
    int[] row = new int[arr[r].length]; 
    System.arraycopy(arr[r], 0, row, 0, row.length); 
    return row; 
} 
Verwandte Themen