比较相邻的数组元素

时间:2014-10-12 19:36:48

标签: java arrays elements

我正在尝试计算相邻数组元素对的差异,然后将差异加在一起,这是我用来执行此操作的方法。

我正在尝试将原始数组拆分为两个较小的数组,然后减去较小数组的元素,这将间接地解决我的初始数组的差异。差异存储在最后一个数组中,这会将我的差异加在一起......

 public static int changeinx(int array1[],int sum) { 
 int n = array1.length;  
int y[];
int u[];
int c[]; 
c = new int [n/2];
y = new int [n/2]; // no. of arrays equal to 1/2 of array1, since two elements subtracted.
u = new int [n/2];
for(int i = 0 ; i < n ; i += 2 ) { 
y[i] = array1[i]; 
}

for(int i = 1 ; i < n ; i += 2) { 
u[i] = array1[i]; 
}

for(int i = 0 ; i < n/2 ; i++ ) { 
c[i] = Math.abs( u[i] - y[i] ) ;
}

for(int r = 0 ; r < c.length ; r++ ) { 

    sum = sum + c[r];  //adding all the differences up, since abs has been taken
    }

return sum ;
} 

为什么这不起作用? :(

2 个答案:

答案 0 :(得分:0)

此循环永远不会结束:

for(int p = 0 ; p < n ; i++ ) {
    y[p] = Math.abs(x); //trying to the difference as x, and asign to array y[]
}

由于pn在循环期间永远不会改变,如果循环开始时p < n不为真,它将永远不会成立,并且循环永远不会结束。


  

我试图找出相邻数组元素对的差异,然后将差异加在一起,这就是我用来做这个的方法。

如果我正确理解了问题描述,这可以更简单地实现:

public static int changeinx(int[] arr) {
    int sumOfDiffs = 0;
    for (int i = 0; i < arr.length - 1; i++) {
        sumOfDiffs += Math.abs(arr[i] - arr[i + 1]);
    }
    return sumOfDiffs;
}

答案 1 :(得分:0)

我发现这个循环存在一个主要缺陷:

for(int i = 0 ; i < n ; i++) {
    int x = array1[i] - array1[i+1] ;

让我举一个例子来说明这一点,比如我们有一个数组

array1 = 25 15 55 12

第一次迭代时的上述循环将为25-15 在第二次迭代中做15-55 和第三次迭代做55-12

所以现在在4个元素的数组上运行这个循环会产生一个包含3个元素的数组,这些元素根本不符合你的n / 2公式。

从我对你的问题的理解,我认为你的意图是在第一个循环中做25-15 第二个循环中的55-12并结束它,关于你如何去做它我留给你弄清楚