Java中一个数组中元素之间的差异

时间:2015-11-01 17:52:39

标签: java arrays methods

我正在学习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;
    } 

3 个答案:

答案 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;
    }