2014-04-29 1 views
0

J'ai une méthode, aModify(), qui prend deux références d'objet, a1 et a2, et deux valeurs de chaîne, dim1 et dim2.Copie de tableau Dimensions

public static Object aModify(Object a1, String dim1, Object a2, String dim2); 

A1 et A2 seront transmises en tant que matrices, et dim1 et dim2 seront transmises en tant que dimensions de matrice (à savoir dim1 = "0", dim2 = "0 0").

L'objectif derrière cette méthode est de prendre le tableau a2 à dim2 et de copier la valeur (s) trouvée à a1 à dim1.

J'ai réussi à copier les deux tableaux dans de nouvelles instances à manipuler, mais je suis vraiment confus sur la façon de traduire les valeurs String dim1 et dim2 en dimensions de tableau, puis d'utiliser ces dimensions pour copier des valeurs.

Jusqu'ici, c'est ce que j'ai pour la méthode. AClone() est une méthode que j'ai écrite qui renvoie une copie de tout tableau passé dans la méthode.

Les tableaux a1 et a2 ont également des dimensions différentes. Le tableau a1 est un tableau tridimensionnel où a2 est un tableau à quatre dimensions.

Répondre

0

Je ne sais pas pourquoi votre méthode ne prend pas les arguments int directement, mais si vous essayez juste de convertir la chaîne "0" à un int, vous pouvez simplement utiliser Integer.parseInt().

Si vous souhaitez convertir la chaîne "0 0" en deux entiers distincts, vous pouvez utiliser String.split() puis Integer.parseInt() sur chaque élément du tableau résultant.

D'après votre description de votre objectif, vous voulez probablement quelque chose comme ça?

int t_dim1 = Integer.parseInt(dim1); 
String[] twodims = dim1.split(" "); 
int t_dim2_1 = Integer.parseInt(twodims[0]); 
int t_dim2_2 = Integer.parseInt(twodims[1]); 

Mise à jour: Il semble que l'OP veut gérer un nombre arbitraire de dimensions. Pour cela, nous devons être un peu plus intelligent. D'abord, nous écrivons une fonction d'aide.

int[] parseAndConvert(String dims) { 
    String[] dimArray = dims.split(" "); 
    int[] retVal = new int[dimArray.length]; 
    for (int i = 0; i < retVal.length; i++) 
     retVal[i] = Integer.parseInt(dimArray[i]); 
    return retVal; 
} 

Puis, à l'intérieur aModify, nous aurons besoin de faire quelque chose comme ça pour trouver l'élément et le mettre. Notez que ceci n'est pas testé, mais cela devrait vous rapproche.

public static Object aModify(Object a1, String dim1, Object a2, String dim2) { 
    int[] dims1 = parseAndConvert(dim1); 
    int[] dims2 = parseAndConvert(dim2); 
    // Find the element to copy. 
    Object copyMe = a1; 
    for (int i = 0; i < dims1.length; i++) 
     copyMe = java.lang.reflect.Array.get(copyMe, dims1[i]); 

    // Find the nested array holding the object we want to overwrite 
    Object target = a2; 
    for (int i = 0; i < dims2.length - 1; i++) 
     target = java.lang.reflect.Array.get(target, dims2[i]); 

    Array.set(target, dims2[dims2.length - 1], copyMe); 
} 
+0

Eh bien, disons que mon professeur est très strict sur ses exigences ... – Delfino

+0

@mynorka, Permettez-moi de savoir si cela est ce que vous essayez de faire. – merlin2011

+0

Oui, c'est ce que je cherche, mais on dirait que ça ne marche que pour un cas. Dans mon programme, j'exécuterai deux cas distincts. Le cas 1 aura dim1 étant "0" et dim2 étant "0 0", et le second cas aura dim1 étant "0 0" et dim2 étant "0 0 0". Je cherche un moyen de pouvoir copier n'importe quel élément à l'index dim1 dans l'index dim2. – Delfino