Я нашел несколько потоков, как перевернуть массив. Однако я не понимаю, почему нельзя использовать один и тот же код как для статического метода, так и для метода void.
Может ли кто-нибудь объяснить разницу в следующих примерах?
Для статического метода мы можем написать:
public static double[] reverse (double[] a)
{
int n = a.length;
for (int i = 0; i < n/2; i++)
{
double temp = a[i];
a[i] = a[n-(i+1)];
a[n-(i+1)] = temp;
}
return a;
}
Но для статической пустоты имеем:
public static void reverse (double[] a)
{
for (int i = 0, j = a.length-1; i < j; i++, j--)
{
double temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
Это всего лишь два разных способа обращения массива, и метод non-void возвращает массив.
@Akceptor Оба метода изменяют существующий массив.
@SteveSmith да, но void не возвращает его.
Возможный дубликат Пустота и возврат в Java — когда использовать




Прежде всего, оба метода в вашем случае являются статическими. У них просто другой тип возврата
Для случая static void reverse (double[] a) вы делаете так:
double[] arr = //some array
reverse(arr); //at this point arr is reversed so that you can use it
reversedArr = arr; //or assign to different variable
На самом деле все в порядке, если вам нужно перевернуть какой-то внутренний массив, но мне все равно это не нравится, потому что не слишком очевидно, что массив изменен. Я не думаю, что это хорошо, чтобы такой метод был публичным...
static double[] reverse (double[] a) хорош для того, чтобы быть частью некоторого служебного класса, т.е.
double[] arr = //some array
reversedArr = ArrayUtils.reverse(arr); // now you can reuse method and you actually see that you changed the array
Но вы следует изменить метод, чтобы не изменять исходный массив, потому что у вас могут возникнуть проблемы (вызов служебного метода не должен изменять начальное значение)
В первом случае вы возвращаете сам массив, во втором случае вы просто изменяете существующий массив и ничего не возвращаете.