2

我想返回一个带有索引的数组,其中 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

4 回答 4

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;
}
于 2013-05-13T18:34:26.457 回答
2
 int array[] = new int[600];

您声明的数组是 size 600

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

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

为什么这不起作用?

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

您可以通过索引访问这些值,从0.

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

发生错误是因为您超出了599.

如何解决这个问题

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

于 2013-05-13T15:28:25.820 回答
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;
}
于 2013-05-13T15:29:13.773 回答
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;
}
于 2013-07-29T19:14:07.737 回答