正确分配内存后出现错误的Java代码

正确分配内存后出现错误的Java代码,java,memory-management,Java,Memory Management,我试图打印每个像素的值,但当p=300时会出现错误。 在p=300之前,打印所有像素 orignal.getHeight=344;和orignal.getWidth=300 这是某种内存分配问题吗?否,这意味着您的逻辑有错误 您尝试按大于数组大小的索引访问数组元素 尝试更改阵列检索的逻辑: int Pixel=binarized.getRGB(q,p); 这是因为该方法需要:getRGBint width,int height,但您为它提供了height,width 请注意,x值是第一个参数

我试图打印每个像素的值,但当p=300时会出现错误。 在p=300之前,打印所有像素

orignal.getHeight=344;和orignal.getWidth=300


这是某种内存分配问题吗?

否,这意味着您的逻辑有错误

您尝试按大于数组大小的索引访问数组元素

尝试更改阵列检索的逻辑:

 int Pixel=binarized.getRGB(q,p);

这是因为该方法需要:getRGBint width,int height,但您为它提供了height,width

请注意,x值是第一个参数,它应该在[0,宽度]范围内。y值是第二个参数,它应该在[0,高度]范围内。你把它们搞错了。我有点失望,不可否认,这个异常并不友好

如果在循环中也使用x和y变量,则会更清楚:

for (int y = 0; y < original.getHeight(); y++)
{                   
    for (int x = 0; x < original.getWidth(); x++)
    {                   
        int pixel = binarized.getRGB(x, y);
        // Use pixel
    }                   
} 

还要注意我是如何在循环中声明x和y的;事先声明它们是没有意义的。我还添加了空格以提高可读性。

第137行或第20行在二值化中是什么行?发布完整的类。但是我打印机数组大小大于300。二值化。高度=344,二值化。宽度=300。我出错了或者在300,1有2个数组时,检查这两个数组的大小,因为该方法需要:getRGBint-width,int-height,但需要提供height,width-toit@Funtik:好吧,它期望的是x,y-而不是宽度和高度。@JonSkeet是的,这完全取决于你如何定义x/y轴
 int Pixel=binarized.getRGB(q,p);
public int getRGB(int x, int y)
for (int y = 0; y < original.getHeight(); y++)
{                   
    for (int x = 0; x < original.getWidth(); x++)
    {                   
        int pixel = binarized.getRGB(x, y);
        // Use pixel
    }                   
}