我正在学习Java,我正在尝试为我的作业构建一种方法。它将Array
作为参数,并返回其元素之间的差异(作为绝对值)。
例如: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;
}
答案 0 :(得分:2)
我稍微改了一下,然后你的代码正常工作。
public static int MaxDiff(int[] array){
int diff = 0;
if (array.length == 0){
return -1;
}
int max = 0;
for (int i = 0; i < array.length-1; ++i){
diff = Math.abs(array[i] - array[i+1]);
if(max < diff)
max = diff;
}
return max;
}
答案 1 :(得分:0)
如果差异大于现有差异,则必须设置差异。
n
同样正如@singhakash所说,大小为n - 1
的数组的最后一个元素的索引为n
,而不是public static void main(String[])
。
答案 2 :(得分:0)
创建一个实例变量maxDiff,如果在循环中发现diff大于当前计算差异,则更新。喜欢
maxDiff = diff > maxDiff ? diff : maxDiff;
最后返回maxDiff;
public static int MaxDiff(int[] array){
//create a variable to hold maxDiff;
int maxDiff = 0;
int diff = 0;
if (array.length == 0){ // Checks for empty array
return -1;
}
//Change from <= to < (otherwise you will get ArrayIndexOutOfBound exception
for (int i = 0; i < array.length; ++i){
if(i == array.length -1){
diff = Math.abs(array[i] - array[0]);
} else {
diff = Math.abs(array[i] - array[i+1]); // Mistake. Can be
// bigger than array
}
//check for max
maxDiff = diff > maxDiff ? diff : maxDiff;
}
return maxDiff;
}