Обратный массив статическим методом VS static void? - PullRequest
0 голосов
/ 05 февраля 2019

Я нашел несколько тем, как перевернуть массив.Однако я не понимаю, почему нельзя использовать один и тот же код как для статического, так и для пустого метода.

Может ли кто-нибудь объяснить разницу в следующих примерах?

Для статического метода мы можем написать:

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;
    }
}

1 Ответ

0 голосов
/ 05 февраля 2019

Прежде всего оба метода в вашем случае являются статическими.Они просто имеют другой тип возвращаемого значения

. Для случая 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

На самом деле это нормально, если вам нужно повернуть некоторый внутренний массив, но я все еще не люблюэто потому что не слишком очевидно, что массив изменен.Я не думаю, что хорошо иметь такой метод public ...

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

Но вы должныИзмените метод, чтобы не изменять исходный массив , поскольку у вас могут возникнуть проблемы (вызов служебного метода не должен изменять начальное значение)

...