查找数组中连续数字之间的差异

时间:2011-04-19 02:48:36

标签: java

我需要以下输出 例如:

int array [] = {1, 2, 3, 4, 5};

应该使用for循环

输出应采用以下形式:

List      Difference
 1            0
 2            1
 3            1
 4            1
 5            1

这是我正在使用的代码,它工作正常,直到4但是然后在5它说outofbounds因为它看着数组中的位置5不会退出。所以,我需要帮助!!!

代码:

for (int counter = 0; counter < degreedays.length;++counter){
    System.out.println("\t" + degreedays[counter] + "\t\t\t" + (degreedays[counter+1] - degreedays[counter]));

4 个答案:

答案 0 :(得分:1)

问题是你的代码使用规范的for循环遍历数组的所有索引,这很好;但是,循环体不仅使用索引(counter)而且使用索引加一(counter+1),这超出了数组索引的范围!

更正您的代码,使其不会尝试访问超出范围的数组元素,例如:通过在尝试使用它之前检查“counter + 1”是否为有效索引。

答案 1 :(得分:1)

for循环的最后一次迭代引用了一个超过数组末尾的迭代,因此得到ArrayIndexOutOfBoundsException。您需要将第一次迭代作为特殊情况处理,因为它始终为零。然后,对于循环的其余部分,减去当前索引减去最后一个索引。 E.g:

int[] degreedays = new int[] { 1, 2, 3, 4, 5 };
for (int counter = 0; counter < degreedays.length; ++counter) {
    int diff = counter == 0 ? 0 : degreedays[counter] - degreedays[counter - 1];
    System.out.println("\t" + degreedays[counter] + "\t\t\t" + diff);
}

答案 2 :(得分:0)

这些事情可以通过各种方式完成。我就是这样做的:

int array [] = {1, 2, 3, 4, 5};
int Previous = array[0]; // Keeps previous value of array and is used to print.
System.out.println("List   Difference");
for (int I=0; I<array.length(); I++) {
    int J=I+1;
    Previous = Previous - array[I];
    System.out.println(" "+J+"   "+Previous);
    Previous = array[I];
}

但请注意,您的导师可能不会欣赏我的代码风格,因为我认为他已经学会了Fortran-66作为我的第一语言。

答案 3 :(得分:0)

试试这个。

    int[] degreedays = new int[] { -81, -2, -3, 10, Integer.MIN_VALUE,1,Integer.MAX_VALUE };// works for random numbers too.
    if(degreedays != null && degreedays.length > 0) {
        System.out.println("\t" + degreedays[0] + "\t\t\t0");

        for (int counter = 1; counter < degreedays.length; ++counter) {
            long s = degreedays[counter];
            long f = degreedays[counter-1];
            System.out.println("\t" + degreedays[counter] + "\t\t\t" + Math.abs(s-f) ); 
        }
    }