我正在尝试计算相邻数组元素对的差异,然后将差异加在一起,这是我用来执行此操作的方法。
我正在尝试将原始数组拆分为两个较小的数组,然后减去较小数组的元素,这将间接地解决我的初始数组的差异。差异存储在最后一个数组中,这会将我的差异加在一起......
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 ;
}
为什么这不起作用? :(
答案 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[]
}
由于p
和n
在循环期间永远不会改变,如果循环开始时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并结束它,关于你如何去做它我留给你弄清楚