【问题标题】:Comparing adjacement array elements比较邻接数组元素
【发布时间】:2014-10-12 19:36:47
【问题描述】:

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

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

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

为什么这不起作用? :(

【问题讨论】:

    标签: java arrays elements


    【解决方案1】:

    我在这个循环中发现了一个重大缺陷:

    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 在第二个循环中并结束它,至于你将如何去做,我留给你去弄清楚

    【讨论】:

    • 感谢您的帮助,我已编辑代码以解决此问题。
    【解决方案2】:

    这个循环永远不会结束:

    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 &lt; 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多