【问题标题】:Reverse an array with static method VS static void?用静态方法VS静态void反转数组?
【发布时间】:2019-06-29 09:49:27
【问题描述】:

我发现了几个线程如何反转数组。但是,我不明白为什么不能对静态方法和 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;
}

但是对于静态的 void 我们有:

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

【问题讨论】:

  • 在第一种情况下,您返回一个数组本身,在第二种情况下,您只需修改现有数组并且不返回任何内容
  • 它们只是数组反转的两种不同方式,非void方法返回数组。
  • @Akceptor 两种方法都会修改现有数组。
  • @SteveSmith 是的,但 void 不会返回它。

标签: java arrays methods static void


【解决方案1】:

首先,在您的情况下,这两种方法都是静态的。他们只是有不同的返回类型

对于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

但是你应该修改一个方法不要改变初始数组,因为你可能会遇到麻烦(调用一个实用方法不应该修改初始值)

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 2016-08-11
    • 2012-03-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2013-10-20
    相关资源
    最近更新 更多