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」の呼び出しを実行した後、2 つの配置を変更したいと考えています。どうすればこれを行うことができますか?

配列の長さを変更する必要があります!

貴重なご協力ありがとうございます。

PD。配列への割り当てを行うのは後であるようですが、「参照による呼び出し」は「値による呼び出し」に変換されます。THE ASSIGNATION が省略された場合、"Call by Reference" が続きます。

4

1 に答える 1

2

配列の長さを変更する必要があります!

それはJavaでは不可能です。インターフェイスの実装など、動的なデータ構造を使用できjava.util.Listます。

メソッドのパラメーターはローカル変数であり、元のオブジェクトを参照しているため、割り当ては役に立ちません。したがって、オブジェクトには 2 つの参照があり、メソッド内で既知の参照のみを変更します。

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));
于 2012-12-10T15:51:13.967 に答える