【问题标题】:Manipulating arrays in separate methods在不同的方法中操作数组
【发布时间】:2017-04-24 09:18:53
【问题描述】:

在我的教科书中,至少对我来说没有什么奇怪的,也就是说我有一个类,这个类有一个方法,它接受一个整数数组(或任何东西),然后用任何类型的算法。奇怪的是他只是调用方法并传递数组,而方法不会返回任何它是无效的。

.....
sort(anArray)
.....
.....
.....
public void sort(int[] array)
.....

这将立即更新要排序的数组。我想到的是该方法将返回另一个数组,该数组是相同的数组,但已排序

.....
arrayx = sort(anArray)
.....
.....
.....
public int[] sort(int[] array)
.....

你能解释一下区别吗?

【问题讨论】:

  • 大多数排序方法都会对数组进行就地排序,因此不需要单独的返回值。如果您想在排序之前创建一个副本,那也可以。

标签: java arrays


【解决方案1】:

示例 1

sort(anArray);
...
public void sort(int[] array) { ... }

在这个例子中,已经传入的数组正在被修改。没有返回任何内容。

这可以通过 Java 将数组作为函数的参数来处理。

你应该看看这个解释数组参数如何工作的问题:Are arrays passed by value or passed by reference in Java?

示例 2

arrayx = sort(anArray);
...
public int[] sort(int[] array) { ... }

在本例中,在函数内部创建了一个新数组,然后返回。

由于原始数组没有被修改,所以需要将函数调用的结果存储在一个变量中,以获取排序后的数组。

【讨论】:

    【解决方案2】:

    1) 在这种情况下,您的函数返回 void(无),这意味着该函数带有 side effect

    public void sort(int[] array)
    

    2) 你的函数返回int[],它可能是pure function(取决于函数代码)

    public int[] sort(int[] array)
    

    关于side effectpure function

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-04
      • 2016-04-26
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多