Java 在数组中查找值并返回索引

Java 在数组中查找值并返回索引,java,arrays,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)

我想返回一个数组,其中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;
}
您声明的数组大小为
600

 for(int i=0;i<76400;i++)
发生错误是因为超过了
599

如何解决这个问题

嗯,您可以将数组
76400
设置为长数组(这对我来说是可疑的),也可以将
76400
更改为
array.length
(或
600
)设置在
for
循环中

您声明的数组大小为
600

 for(int i=0;i<76400;i++)
发生错误是因为超过了
599

如何解决这个问题


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

这是因为你的循环是从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;
}
publicstaticint[]findIndex(buffereImage图像,int值)
{
DataBuffer b=image.getRaster().getDataBuffer();
int数组[]=新int[600];
for(int i=0;i=value)
数组[i]=i;
}
返回数组;
}

这是因为您的循环从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;
}
publicstaticint[]findIndex(buffereImage图像,int值)
{
DataBuffer b=image.getRaster().getDataBuffer();
int数组[]=新int[600];
for(int i=0;i=value)
数组[i]=i;
}
返回数组;
}

这是我找到的解决方案

我认为那是最好的

 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;
}
publicstaticint[]findIndex(buffereImage图像,int值){
DataBuffer b=image.getRaster().getDataBuffer();
int数组[]=新int[600];
int j=0;
对于(int i=0;i=值){
如果(j<600){
数组[j]=i;
j++;
}
}
}
返回数组;
}

这是我找到的解决方案

我认为那是最好的

 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;
}
publicstaticint[]findIndex(buffereImage图像,int值){
DataBuffer b=image.getRaster().getDataBuffer();
int数组[]=新int[600];
int j=0;
对于(int i=0;i=值){
如果(j<600){
数组[j]=i;
j++;
}
}
}
返回数组;
}
这是我的最后一个函数。 我们应该如何选择一个泛型编程,我做了一些改变​​a正是关注这一点。 使用“现在有一个列表而不是一个静态数组”

   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;
}
publicstaticint[]findIndex(buffereImage图像,int值){
DataBuffer b=image.getRaster().getDataBuffer();
ArrayList a=新的ArrayList(20);
int j=0;
对于(int i=0;i=值){
a、 加(i);
j++;
}
}
int数组[]=新的int[a.size()];
对于(int k=0;k
这是我的最后一个函数。 我们应该如何选择一个泛型编程,我做了一些改变​​a正是关注这一点。 使用“现在有一个列表而不是一个静态数组”

   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;
}
publicstaticint[]findIndex(buffereImage图像,int值){
DataBuffer b=image.getRaster().getDataBuffer();
ArrayList a=新的ArrayList(20);
int j=0;
对于(int i=0;i=值){
a、 加(i);
j++;
}
}
int数组[]=新的int[a.size()];
对于(int k=0;k
打印索引,我打赌它必须大于599!!!!!您正在使用
600
初始化数组,因此任何大于599的值都将抛出错误!!!是的,问题是数组的大小。为什么循环到
76400
?由于您的数组仅存储601个元素,这可能会导致问题?@Kuchi数组存储600个元素我希望在我的数据缓冲区(76400个位置)中搜索,然后将其存储在数组中。我只需要600个值,因此我声明我的数组具有600个位置。打印索引,我打赌它必须大于599!!!!!您正在使用
600
初始化数组,因此任何大于599的值都将抛出错误!!!是的,问题是数组的大小。为什么循环到
76400
?由于您的数组仅存储601个元素,这可能会导致问题?@Kuchi数组存储600个元素我希望在我的数据缓冲区(76400 pos)中搜索,然后将其存储在数组中。我只需要600个值,所以我声明我的数组有600个位置。这很好,除非少于600个匹配。我不测试这种可能性,但我的图像有76400个像素,所以,我认为没有600个匹配很难。这是一个解决问题的方法,对于其他人来说,它可能不起作用。在这种情况下,看起来你已经找到了自己问题的答案。如果你愿意,你可以这样标记。这很好,除非匹配少于600个。我不测试这种可能性,但我的图像有76400像素,所以,我认为没有600个匹配很难。这是一个解决问题的方法,对于其他人来说,它可能不起作用。在这种情况下,看起来你已经找到了自己问题的答案。如果你愿意,你可以这样做。