2012-12-10 20 views
0

我有:改變字節的真正的數組的Java

 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。看起來稍後要對數組進行賦值,「通過引用調用」在「按值調用」中進行轉換。如果ASSIGNATION被省略,那麼「參照呼叫」就是。

+0

你真正要做的是創建源陣列的新版本,代表某種形式的「變異」操作。所以,在你的方法中創建新的數組,並返回***它。然後,您可以將它分配給保存源數據的相同變量,或者更好地將其分配給具有更有意義名稱的另一個變量。 – Perception

回答

2

我需要改變陣列的長度!

這在Java中是不可能的。您可以使用動態數據結構,如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));