2010-03-31 7 views
2

Je voudrais savoir quelle est la bonne façon de copier un tableau à deux dimensions d'un tableau temporaire dans le tableau d'origine. La taille du tableau est inconnue au début du programme et l'utilisateur le définit plus tard. est ici le code:comment copier tableau bidimensionnel de l'un à l'autre en Java

private static void copy_Matrix (int origin_Matrix [] [], int copy_Matrix [] [], ligne, int colonne)

{

 for (int i = 0 ; i < row-1; ++i) 
     { 
      for (int j = 0; j < column; j++) 
      { 
       origin_Matrix[i][j] = copy_Matrix[i][j]; 

      } 
     } 

}

Je sais qu'il est mal, s'il vous plaît aider ..

+0

i i

Répondre

3

Aucun incrément de préfixe nécessaire en Java. De plus, vous n'avez pas besoin de passer un nombre de lignes et de colonnes en Java (cela ne laisse que de la place pour l'erreur). Et, il existe une fonction, System.arraycopy qui devrait être au moins aussi efficace que de les copier un à la fois, sinon plus.

private static void copy_Matrix(int origin_Matrix[][] , int copy_Matrix[][]) 
{ 
    /* assert origin_Matrix.length == copy_Matrix.length */ 
    for (int i = 0 ; i < origin_Matrix.length; i++) 
    { 
     /* assert origin_Matrix[i].length == copy_Matrix[i].length */ 
     System.arraycopy(origin_Matrix[i], 0, copy_Matrix[i], 0, origin_Matrix[i].length); 
    } 
} 

Notez que vous devez être au courant des collections Java (comme List/ArrayList ou Vector) et de décider consciemment que les faibles gains de performance d'un tableau de ints est nécessaire dans votre cas, sur la lisibilité supplémentaire et de commodité que les Collections fournissent.

1

Y a-t-il une raison pour laquelle vous utilisez des primitives au lieu de Java Collections? Sinon, je les utiliserais. Ils sont optimisés et fournissent une API assez robuste pour la manipulation.

+0

Entièrement d'accord. –

+0

Les tableaux int ont leur place dans certaines opérations. Par exemple, en faisant des problèmes de Project Euler, j'utilisais Vector à la place d'un tableau parce que c'était plus facile et je me suis dit que c'était assez optimisé pour que ça ne fasse pas une grande différence; Après avoir été déçu par la vitesse, je suis passé aux tableaux int et c'était une énorme différence. Cependant, je suis d'accord qu'Edan devrait être conscient des collections Java et décider consciemment qu'un ensemble d'ints est meilleur. Dans ce cas, il semble simplement porter du code à partir de C/C++ comme le montre l'opérateur de préfixe et les paramètres de ligne, col. – Ricket

2

Vous feriez mieux de finir avec quelque chose comme:

private static int[][] copy_Matrix(int origin_Matrix[][]) 
{ 
    int copy[][] = new int[origin_Matrix.length][origin_Matrix[0].length]; 
    for (int i = 0 ; i < origin_Matrix.length; ++i) 
    { 
     System.arraycopy(origin_Matrix[i], 0, copy[i], 0, origin_Matrix[i].length); 
    } 
    return copy; 
} 
0

@Eden

Le code n'est pas parfait; pourquoi faites-vous un i < row-1

vérifiez d'abord pour la boucle? Je suppose que vous auriez dû faire i < row vérifier à la place

De même, vous n'avez pas besoin de passer les tailles explicitement. Vous pouvez utiliser le champ .length sur les tableaux pour obtenir leur taille.

Questions connexes