按:这是从《编程之美》上看到的一个题目。
已知一个数组,用它每一项除以第一项,得到一个新数组。求得到新数组的函数。
这个问题可以如下描述
最直接的解法,定义一个等长的新数组,循环赋值给每个元素即可。如下:
public static int[] genNewArray1(int[] a) {
int[] b = new int[a.length];
if (a[0] != 0) {
for (int i = 0; i < a.length; i++) {
b[i] = a[i] / a[0];
}
}
return b;
}
这个解法比较直接,但不够炫技,因此有了下边的解法:
public static void genNewArrray(int[] a) {
if (a[0] != 0) {
for (int i = a.length - 1; i >= 0; i--) {
a[i] /= a[0];
}
}
}
这个方法和上个方法相比,没有返回值,也没有定义新的数组,而且循环是倒着来的。能这么做的理由如下:
根据 Java 语言的特征,方法入口传入的仅仅是 a 的引用。虽然 Java 的参数是值传递的,但此时的值,就是引用。—— 对于非元数据类型,可以认为这是变相的“引用传递”。
如果不倒着来,那么 a[0] 赋值为1后,后边的元素除以1,结果就会得到一个{1, 1, …, 1}这样的数组。
详细代码在这里.
本文是从Google Sites上的旧站搬运过来的。