【问题标题】:Filter differences in array过滤数组中的差异
【发布时间】:2011-12-08 09:37:00
【问题描述】:

我想通过计算差异来过滤数组。代码如下:

public void compressData(List<Long> array){
    for(int i = 0; i <= array.size(); i++){
        if(Math.abs(array.get(i) - (array.get(i + 1))) >= 100){
            newArray.add(array.get(i));
        }
    }
}

假设我有一个 [1, 3, 5, 10] 的数组。我希望数组中数字之间的范围至少为 5,因此在这种情况下,应该删除数字 3。所以我想比较 array[i] 和 array[i + 1]

上面的代码不起作用(我知道它实际上不起作用,我想我只是绝望了)因为array.get(i - 1)array.get(i + 1) 会给出 ArrayOutOfIndexException

提前谢谢你=)

【问题讨论】:

  • 看看ArrayIndexOutOfBoundsException是什么,然后尽量防止它发生。
  • @Steven Jeuris 我知道我正在访问非法数量的数组,因为array.get(i - 1) 将在数组的开头返回 array[-1] 而array.get(i + 1) 将返回 array.size() + 1. 如果我错了,请纠正我。
  • 对于[1, 3, 5, 10] 和范围&gt;=5,答案将是[1, 10]

标签: java android arrays math filter


【解决方案1】:

如何将您的 for 行更改为:

for(int i = 0; i < array.size()-1; i++)

那么你可以使用 array.get(i+1)

【讨论】:

  • 它给出 NullPointerException =O
  • 应该对输入参数(List 数组)和“数组”的元素进行空值检查。
  • 我仍然得到 NullPointerException。我想我错过了基本的理解,介意解释空值检查吗?对不起,如果问题是 noob =x
  • 在调用array.size() 之前,数组不应该为空(array!=null),在你调用Math.abs(array.get(i) - (array.get(i + 1)) 之前,元素i 和i+1 不应该为空。检查他们。
  • 我把(array!=null)放在循环之前,它在newArray.add(array.get(i));返回NullPointerException
【解决方案2】:

试试这个代码

int diff = 100;
if (array.size() > 0) {
  newArray.add(array.get(0));    
}
int prev = array.get(0);
for(int i = 1; i < array.size(); i++){
        int cur = array.get(i);
        if(cur - prev) >= diff){
            newArray.add(cur);
            prev = cur;
        }
    }

【讨论】:

  • array和newArray不为空吗?
  • 是的,if (array.size() &gt; 0) { 必须更宽并包含prevfor
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
相关资源
最近更新 更多