gpt4 book ai didi

java - 为什么要在方法中引入新数组?为什么不重用该参数?

转载 作者:行者123 更新时间:2023-12-02 13:00:54 25 4
gpt4 key购买 nike

在方法 normalize 中,我输入一个数组,例如 {1, 2, 3, 4},返回的是一个标准化数组,{0.1 , 0.2, 0.3, 0.4}。我知道我应该在方法中引入一个新数组(下面的b),但实际上为什么呢?

public static double[] normalize(double[] a) {
double[] b = new double[a.length];
double sum = 0;
for (int i = 0; i < b.length; i++) {
sum += a[i];
}
for (int i = 0; i < b.length; i++) {
b[i] = a[i]/sum;
}
return b;
}
Input: 1 2 3 4
Output: 0.1 0.2 0.3 0.4

为什么以下错误:

public static double[] normalize(double[] a) {
double sum = 0;
for (int i = 0; i < a.length; i++) {
sum += a[i];
}
for (int i = 0; i < a.length; i++) {
a[i] = a[i]/sum;
}
return a;
}
Input: 1 2 3 4
Output: 0.1 0.2 0.3 0.4

最佳答案

区别在于,一种方法就地更新输入数组,而另一种方法则保持数组不变并返回一个副本。

两者都没有错(*),两种方式都有自己的位置,你只需要确保调用者知道发生了什么。

如果就地更新,您可以通过使方法void而不是返回对同一数组的(冗余)引用来使这一点更清楚。

<小时/>

(*) 在现代实践中,更喜欢不可变的数据结构。因此,除非性能是一个真正的问题,否则请选择“更安全”的变体。

关于java - 为什么要在方法中引入新数组?为什么不重用该参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60282591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com