【发布时间】:2015-11-01 17:52:39
【问题描述】:
我正在学习 Java,并尝试为我的作业构建一种方法。它将Array 作为参数并返回其元素之间的差异(作为绝对值)。
例如:数组{7,8,5,7,2}
元素 0 和 1 的差为 1 (=7−8)
元素 1 和 2 的差为 3 (=8−5)
元素 2 和 3 的差是 2 (=5-7)
元素 3 和 4 的差是 5 (=7−2)
元素 4 和 0 的差是 5 (=2-7)
如果有多个候选者,该方法将返回具有最大索引的那个。在这个例子中,最后一个。如果array 为空,则该方法必须返回−1。
我的代码中有一些问题(如您所见),最大的问题是我的方法只返回最后一个 diff 而不是索引较高的最大的。有人能帮我吗?我不知道如何解决这个问题。
public static int MaxDiff(int[] array){
int diff = 0;
if (array.length == 0){ // Checks for empty array
return -1;
}
for (int i = 0; i <= array.length; ++i){
if(i == array.length){
diff = Math.abs(array[i] - array[0]);
} else {
diff = Math.abs(array[i] - array[i+1]); // Mistake. Can be
// bigger than array
}
}
return diff;
}
【问题讨论】:
-
你显示的代码会给你
ArrayIndexOutOfBoundException -
另外:不要在循环内使用
if来检查它是否是最后一次迭代。只需在循环之后添加代码即可。