Java: Как изменить параметр массива Integer из метода - PullRequest
0 голосов
/ 03 марта 2019

У меня есть программное задание, в котором я должен создать метод, который принимает массив, разбитый на подмассивы, и объединяет их.Мой метод работает нормально, но массив Integer, который передается в 'a', изменяется только внутри метода и остается неизменным снаружи.

Посмотрев вокруг в Google, я пришел к выводу, что невозможно изменить параметр массива, но затем я подумал о Arrays.sort, который в конечном итоге изменяет параметр массива вне метода.

Как изменить массив, передаваемый в качестве параметра, чтобы он оставался измененным вне метода?

    /**
        * Merge three sorted arrays with these ranges [lo..mid1], [mid1+1..mid2], [mid2+1..hi] into one sorted array.
        * Array a has the original input and final sorted input. 
        * Array aux is the auxiliary array.
        */

   public static void Merge(Integer[] a, int lo, int mid1, int mid2, int hi, Integer[] aux) {

      int[] arr1 = copyArray(a, lo, mid1);
      int[] arr2 = copyArray(a, mid1+1, mid2);
      int[] arr3 = copyArray(a, mid2+1, hi);

      int i = 0, j = 0, k = 0, idx = 0;

      while(i < arr1.length-1 || j < arr2.length-1 || k < arr3.length-1) {

         // arr1[i] is the smallest
         if(arr1[i] <= arr2[j] && arr1[i] <= arr3[k]) {
            System.out.println("i is bigger at " + arr1[i]);
            aux[idx] = arr1[i];
            i++;
         }

         // arr2[j] is the smallest
         else if(arr2[j] <= arr1[i] && arr2[j] <= arr3[k]) {
         System.out.println("j is bigger at " + arr2[j]);
            aux[idx] = arr2[j];
            j++;
         }

         // arr3[k] is the smallest
         else if(arr3[k] <= arr2[j] && arr3[k] <= arr1[i]) {
            System.out.println("k is bigger at " + arr3[k]);
            aux[idx] = arr3[k];
            k++;
         }

         idx++;
      }


      System.out.println(Arrays.toString(arr1));
      System.out.println(Arrays.toString(arr2));
      System.out.println(Arrays.toString(arr3));


      System.out.println(Arrays.toString(aux));

      a = aux;
      a[0] = 900;
      System.out.println("a from Merge method: " + Arrays.toString(a));


   }

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вы должны выполнить итерацию по вашему массиву aux и присвоить значение массиву 'a':

a[i] = aux[i]

Или вернуть объединенный массив в качестве результата.

public static int[] Merge(int[] a, int mid1, ...){
   // do something
  return a;
}
0 голосов
/ 04 марта 2019

Вы можете изменить void на int [] [], а затем вернуть массивы

public static int[][] Merge(arguments) {
    //Do math
    int[][] result = new int[][] {arr1, arr2, arr3};
    return result;
}

Затем, вне метода, который вы вызываете, как показано ниже:

int[][] integerArray = Merge(arguments);
arr1 = integerArray[0];
arr2 = integerArray[1];
arr3 = integerArray[2];
...