在循环中将值插入数组

时间:2018-08-24 08:22:20

标签: java arrays loops

我正在开发一个计算像素及其RGB的程序。 我正在尝试将这些值插入二维数组,但是在循环一遍后,程序将引发异常。 为什么会这样?

当我注释掉循环中的数组行时,它不会中断。

package imaging;

import java.awt.*;
import java.awt.image.BufferedImage;

import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Imaging3 {

    BufferedImage image;
    int width, heigth, test;
    int i, j;
    int[][] hor = new int[i][j];

    public Imaging3(){
        try {
            File input = new File("img1.png");
            image = ImageIO.read(input);
            width = image.getWidth();
            heigth = image.getHeight();

            int count = 0;

            System.out.println("Horizontal scan: ");

            for (i = 0; i < heigth; i++){
                for (j = 0; j < width; j++){

                    count++;
                    Color c = new Color(image.getRGB(j, i));
                    System.out.println("nr " + count + "| " + c.getRed() + " " + c.getGreen() + " " + c.getBlue());
                    hor[i][j] = c.getRed();
                    }
            }

        }catch (Exception e) {
        System.out.println("Program over");
        }
    }

    static public void main(String args[]) throws Exception{
        Imaging3 obj = new Imaging3();
    }
}

3 个答案:

答案 0 :(得分:0)

您的代码的问题是,当您在此处初始化数组时:

int i, j=0;
int[][] hor = new int[0][0];

这可以理解为:

 width = image.getWidth();
 height= image.getHeight();

 int[][] hor = new int[height][width];

int的默认值为0,因此基本上可以创建空的二维数组。当您尝试插入值时,它将引发异常。

要解决此问题,请在您已经知道高度和宽度的代码中移动数组的初始化。

{{1}}

并在顶部删除这些i,j。您不需要它们;)仅为循环定义它们。一个好的做法是在需要的地方而不是在类级别定义变量。

答案 1 :(得分:0)

由于您已将i和j定义为类属性,因此它们的默认值为0。因此,下面的代码行为两个维度生成了大小分别为0和0的数组:

int[][] hor = new int[i][j]; 

在读取图像的宽度和高度之后,立即从属性直接实例化和新数组中移除数组的实例化,如下所示:

public class Imaging3 {

    BufferedImage image;
    int test;
    int[][] hor;

    public Imaging3(){
        try {
            File input = new File("img1.png");
            image = ImageIO.read(input);
            int width = image.getWidth();
            int heigth = image.getHeight();

            hor = new int[height][width];

            int count = 0;

            System.out.println("Horizontal scan: ");

            for (int i = 0; i < heigth; i++){
                for (int j = 0; j < width; j++){

                    count++;
                    Color c = new Color(image.getRGB(j, i));
                    System.out.println("nr " + count + "| " + c.getRed() + " " + c.getGreen() + " " + c.getBlue());
                    hor[i][j] = c.getRed();
                    }
            }

        }catch (Exception e) {
        System.out.println("Program over");
        }
    }

    static public void main(String args[]) throws Exception{
        Imaging3 obj = new Imaging3();
    }
}

答案 2 :(得分:0)

您尚未为i和j分配值,因此它们为零,即int类型的默认值。然后数组hor变为0 * 0数组。