2012-12-10 4 views
0

나는 것이 있습니다변경 실제 배열 자바

 byte[] AllNumber = {4,3,2,1,0,5,6,7,8,9}; 
     byte[] MultNumber = {4,3,2,1,0,5,6,7,8,9}; // No matter the content 
     byte[] DivNumber = {4,3,2,1,0,5,6,7,8,9}; // No matter the content 

     Alter(AllNumber,MultNumber,DivNumber,5.0,3,2); //The Arrays must be Altered!! 

     for (int i = 0; i<MultNumber.length; i++) { 
     System.out.println("MultNumber["+i+"]:"+MultNumber[i]); 
     } 
     for (int i = 0; i<DivNumber.length; i++) { 
     System.out.println("DivNumber["+i+"]:"+DivNumber[i]); 
     } 

이 지금은이 방법을 가지고 :

 Alter(byte[] src, byte[] Mlt, byte[] Dvs, double dNum, int Lngt, int Ini) { 
     // INI THE PROBLEM 
     Mlt = Arrays.copyOf(Mlt, src.length + Lngt); //HERE IS THE ASSIGNATION 
     for (int i = ini; i<Mlt.length; i++) { 
      Mlt[i] = Mlt[i]*dNum; //No matter the operation (to simplify the problem) 
     } 

     Dvs = Arrays.copyOf(Dvs, src.length - Lngt); //HERE IS THE ASSIGNATION 
     for (int i = Ini; i<Dvs.length; i++) { 
      Dvs[i] = Dvs[i]/dNum; //No matter the operation (to simplify the problem) 
     } 
     // END THE PROBLEM 
     } 

내가 원하는
 //Another Attempt!!! 
     Alter(byte[] src, byte[] Mlt, byte[] Dvs, double dNum, int Lngt, int Ini) { 
     // INI THE PROBLEM 
     byte[] TM = new byte[src.length + Lngt] 
     for (int i = ini; i<Mlt.length; i++) { 
      TM[i] = Mlt[i]*dNum; //No matter the operation (to simplify the problem) 
     } 
     Mlt = TM; //HERE IS THE ASSIGNATION 
     TM = null; 

     byte[] TD = new byte[src.length - Lngt] 
     for (int i = Ini; i<Dvs.length; i++) { 
      TD[i] = Dvs[i]/dNum; //No matter the operation (to simplify the problem) 
     } 
     Dvs = TD; //HERE IS THE ASSIGNATION 
     TD = null; 
     // END THE PROBLEM 
     } 

두 배열이 후 변경하려면 또 다른 시도 메소드 "Alter"의 호출을 수행한다. 어떻게 할 수 있습니까?

배열의 길이를 변경해야합니다!

도움을 주셔서 감사합니다.

PD. 나중에 배열에 할당하는 것처럼 보이며 "호출 기준"은 "호출 값"으로 변환됩니다. 지정이 생략되면 "참조로 호출"이 표시됩니다.

+0

당신이 정말로 일종의 '돌연변이'작업을 대표하는 소스 배열의 새 버전을 생성 할 일은 노력하고 있습니다. 그래서, 당신의 메소드에 새로운 배열을 만들고 ***를 반환합니다. 그런 다음 소스 데이터를 보유하고있는 변수와 동일한 변수에 할당하거나,보다 의미있는 이름을 가진 다른 변수에 할당 할 수 있습니다. – Perception

답변

2

배열의 길이를 변경해야합니다!

자바에서는 불가능합니다. java.util.List 인터페이스의 구현과 같은 동적 데이터 구조를 사용할 수 있습니다.

메소드 매개 변수가 원본 변수를 참조하여 원본 객체를 참조하기 때문에 과제가 도움이되지 않습니다. 따라서 객체에는 두 개의 참조가 있으며 메서드 내에서 알려진 참조 만 변경하면됩니다.

Java는 값별로 호출을 사용하고 참조 데이터 유형에 대해서는 값이 참조의 값이므로 동일한 객체에 대한 참조를 얻습니다.

배열을 변경하려는 경우 이와 같은 작업을 수행 할 수 있습니다. 이 같은

public static int[] arrayTwiceAsBig(int[] original) { 
    int[] newOne = new int[original.length * 2); 
    System.arraycopy(original, 0, newOne, 0, original.length); 
    return newOne; 
} 

과 전화 :

int[] myArray = {1,2,3}; 
myArray = arrayTwiceAsBig(myArray); 
System.out.println(Arrays.toString(myArray));