2014-04-29 4 views
0

두 개의 객체 참조 인 a1과 a2와 두 개의 문자열 값인 dim1과 dim2를 사용하는 aModify() 메서드가 있습니다.배열 크기 복사

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

A1 및 A2는 어레이로 전달되며, 및 DIM1 DIM2 어레이 크기로 전달한다 (즉 DIM1 = "0", DIM2 = "0 0").

이 방법의 목표는 dim2에서 배열 a2를 가져 와서 거기에있는 값을 dim1의 a1에 복사하는 것입니다.

두 인스턴스를 조작 할 새 인스턴스에 성공적으로 복사했지만 배열 값으로 문자열 값 dim1 및 dim2를 변환하는 방법에 대해 혼란스러워하며 값을 복사 할 때이 치수를 사용합니다.

지금까지이 방법을 사용했습니다.

Object copy1 = Array.newInstance(a1.getClass().getComponentType(), Array.getLength(a1)); 
Object copy2 = Array.newInstance(a2.getClass().getComponentType(), Array.getLength(a2)); 

copy1 = MyUtility.aClone(a1); 
copy2 = MyUtility.aClone(a2); 

aClone()은 메소드에 전달 된 배열의 복사본을 반환하는 필자가 작성한 메소드입니다.

배열 a1과 a2도 서로 다른 차원을가집니다. 배열 a1은 3 차원 배열이고 a2는 4 차원 배열입니다.

답변

0

나는 당신의 방법은 직접 int으로 인수를하지 않는 이유를 잘 모르겠지만, 당신은 단지 int에 문자열 "0"을 변환하려는 경우, 당신은 단지 Integer.parseInt()를 사용할 수 있습니다.

"0 0" 문자열을 두 개의 개별 정수로 변환하려면 결과 배열의 각 요소에 String.split()Integer.parseInt()을 사용할 수 있습니다.

목표에 대한 설명을 토대로 다음과 같은 것을 원할 것입니다.

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

업데이트 : 그것은 영업 이익은 차원의 임의의 숫자를 처리하고자하는 것으로 보인다. 이를 위해서는 좀 더 영리해야합니다. 먼저 헬퍼 함수를 ​​작성합니다.

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

그런 다음, aModify 안에, 우리는 요소를 발견하고 그것을 설정 같은 것을 할 필요가있을 것이다. 이것은 테스트되지 않았지만 꽤 가깝게 처리해야합니다.

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

음, 그냥이 당신이하려고했던 것입니다 알려줘, 내 교수는 자신의 요구 사항 ... – Delfino

+0

@mynorka에 대해 매우 엄격한 가정 해 봅시다. – merlin2011

+0

예, 이것이 내가 찾고있는 것이지만, 한 케이스에서만 작동하는 것처럼 보입니다. 내 프로그램에서는 두 가지 사례가 있습니다. 사례 1은 dim1이 "0"이고 dim2가 "0 0"이며 두 번째 경우는 dim1이 "0 0"이고 dim2가 "0 0 0"이됩니다. 색인 dim1에있는 모든 요소를 ​​색인 dim2로 복사 할 수있는 방법을 찾고 있습니다. – Delfino