//我从键盘输入两个数组,然后相加付给第三个数组并打印,可是空指针异常!public class Matrix { public static void main(String[] args) {
new Matrix().fuzhi(); } public void fuzhi() {
Scanner s = new Scanner(System.in);
int i = s.nextInt();
int j = s.nextInt();
int a[][] = new int[i][j];
int b[][] = new int[i][j]; for (int k1 = 0; k1 < i; k1++) {
for (int k2 = 0; k2 < j; k2++) {
a[k1][k2] = s.nextInt();
}
} for (int k3 = 0; k3 < i; k3++) {
for (int k4 = 0; k4 < j; k4++) {
b[k3][k4] = s.nextInt();
}
} add(a, b);
} public void add(int a[][], int b[][]) {
int sum[][] = null;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length; j++) {
sum[i][j] = a[i][j] + b[i][j];
System.out.println(sum[i][j]);
}
} }}

解决方案 »

  1.   

    for   (int   i   =   0;   i   <   a.length;   i++)   { 
    for   (int   j   =   0;   j   <   a.length;   j++)   { 
    超出范围了,应该是:
    for   (int   i   =   0;   i   <   a.length-1;   i++)   { 
    for   (int   j   =   0;   j   <   a.length-1;   j++)   { 
      

  2.   

    sun没有初始化,还有一些其他的问题,更改后的add方法:public void add(int[][] a, int[][] b) { 
        int[][] sum = new int[a.length][a[0].length]; 
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                sum[i][j] = a[i][j] + b[i][j];
                System.out.println(i + " " + j + " " + sum[i][j]);
            }
        }
    }
      

  3.   

    int   sum[][]   =   null; 
    你这个数组没有分配内存,当然会空指针异常了。给它分配内存就行了。
      

  4.   

    int sum[][] = null; 
    这句有问题,因为你还没有分配空间,下面就不能用它
    sum[i][j]   =   a[i][j]   +   b[i][j]; //这里会出错。你可以把三个数组的维数大小,设成类成员。然后在构造函数或其他方法里初始话数组维数的大小。
      

  5.   

    i等于j吗?
    二维数组要区分第维和第二维。
    for       (int       i       =       0;       i       <       a.length-1;       i++)       {   
    for       (int       j       =       0;       j       <       a[i].length-1;       j++)       {