在数组和返回索引中查找值

时间:2013-05-13 15:24:53

标签: java arrays

我想返回一个索引的数组,其中getElem()等于或大于某个值。

这是我的功能:

public static int []findIndex(BufferedImage image,int value)
{
    DataBuffer b = image.getRaster().getDataBuffer();
     int array[] = new int[600];
    for(int i=0;i<76400;i++)
    {
        if(b.getElem(i)>=value)
            array[i]=i;
    }
    return array;
}

但我有错误

"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 27001
    at arraytest.imageMan.findIndex(imageMan.java:139)
    at arraytest.imageMan.main(imageMan.java:183)"

4 个答案:

答案 0 :(得分:2)

 int array[] = new int[600];

您声明的数组大小为600

 for(int i=0;i<76400;i++)

然而,您尝试在76400'索引处引用该数组。

为什么这不起作用?

好吧,当你说new int[600]时,你实际上在说,我的数组可以存储600个东西,这意味着它有600个不同的“插槽”来存储值。

您可以从0开始按索引访问这些值。

array[0] // First item
array[599] // Last item.

您的错误已经发生,因为您已超过599

如何解决此问题

好吧,你可以让你的数组76400长,(这对我来说是可疑的),或者你可以将76400改为array.length(或600)in你的for循环。

答案 1 :(得分:2)

这是我找到的解决方案..

我认为这是最好的..

 public static int[] findIndex(BufferedImage image, int value) {
    DataBuffer b = image.getRaster().getDataBuffer();
    int array[] = new int[600];
    int j = 0;
    for (int i = 0; i < b.getSize(); i++) {
        if (b.getElem(i) >= value) {
            if (j < 600) {
                array[j] = i;
                j++;
            }
        }
    }
    return array;
}

答案 2 :(得分:0)

那是因为你的循环从0到76400,远远大于数组的大小。

public static int []findIndex(BufferedImage image,int value)
{
    DataBuffer b = image.getRaster().getDataBuffer();
    int array[] = new int[600];
    for(int i=0;i<array.length;i++)
    {
        if(b.getElem(i)>=value)
            array[i]=i;
    }
    return array;
}

答案 3 :(得分:0)

这是我的最后一项功能。 我们应该如何选择通用编程,我做了一些改变,使得精确关注这一点。 现在使用列表而不是静态数组。

   public static int[] findIndex(BufferedImage image, int value) {
    DataBuffer b = image.getRaster().getDataBuffer();
    ArrayList<Integer> a = new ArrayList<>(20);

    int j = 0;
    for (int i = 0; i < b.getSize(); i++) {
        if (b.getElem(i) >= value) {
            a.add(i);
            j++;
        }
    }
    int array[] = new int[a.size()];
    for (int k = 0; k < a.size(); k++) {
        array[k] = a.get(k);
    }
    return array;
}