передача результата функции void в двойную функцию

#java #arrays #function #parameters #median

Вопрос:

Я пытаюсь объединить два отсортированных массива в пустую функцию «объединено», а затем передать объединенный массив из этой функции в «findMedianSortedArray», чтобы найти медиану этого объединенного массива.

У меня возникли проблемы с пониманием того, как это сделать, и я исчерпал свой поиск в Google. как бы я смог это сделать? спасибо за вашу помощь.

Код ниже

 class Solution {  public double findMedianSortedArrays(int[] nums1, int[] nums2){   int[] mergedArr = new int[nums1.length nums2.length];  double median;    if(mergedArr.length %2 == 0 ){  median = (mergedArr[mergedArr.length/2]  mergedArr[mergedArr.length/2 - 1] ) /2;  }else{  median = mergedArr[mergedArr.length/2];  }    return median;  }    private void merged(int[] nums1, int[] nums2, int[] mergedArr){  int i = 0;  int j = 0;  int k = 0;    while(i lt; nums1.length amp;amp; j lt; nums2.length){  if(nums1[i]lt; nums2[j]){  mergedArr[k] = nums1[i];  i  ;  }else{  mergedArr[k] = nums2[j];  j  ;  }  k  ;  }  while(i lt; nums1.length ){  mergedArr[k] = nums1[i];  i  ;  j  ;  }  while(j lt; nums2.length ){  mergedArr[k] = nums2[j];  i  ;  j  ;    }  }   }  

Ответ №1:

[1] ваш merged код взломан. Он не увеличивается k во втором и третьем while цикле.

[2] Просто … назови это:

 int[] mergedArr = new int[nums1.length nums2.length]; merged(nums1, nums2, mergedArr);  

Первая строка создает новый массив, в котором еще ничего нет (все нули). Вторая строка вызывает merged метод, передавая ему все 3 массива. Способ merged , которым работает ваш метод, заключается в том, что он устанавливает значения третьего массива. Который ваш mergedArr , поэтому, как только merged вернется, у него будет то, что вы хотите.

Обычно вместо этого вы пишете метод , который возвращает int[] , и заставляете merged метод создавать этот массив. Ваше название фактически является оксюмороном: void функция по определению ничего не возвращает. Вы пошли на творческий выбор, чтобы иметь метод, который изменяет один из его аргументов. Это работает; это не совсем современный стиль кодирования.

Комментарии:

1. Спасибо, что прояснили это. Я слишком много думал об этом, поразмыслив.