解决方案 »

  1.   

               for(j=0;j<3;++j)  // 很奇怪 明明是4*4的 矩阵,为什么这里j<4就会报错,我觉得就应该是j<4
                    System.out.printf(a[i][j]+",");  
    你这里循环完了,J是3;如果是j<4的话,执行到这里J就是4;
                System.out.println(a[i][j]); 
    这里的a[i][4]就outofindex了。
      

  2.   

    for循环如果没有{}的话,只有下面一条语句是属于循环体的,最后的一句println不在循环体之中,执行完了循环之后j的值已经是4了。
      

  3.   

    如果条件是j<4,则跳出循环的时候j==4,第二个System.out中的a[i][j]的j就是4了,所以越界了
      

  4.   


    谢谢  不过还是不明白 这一行for(int i=0;i<4;++i)     如果我改成i<3     矩阵会被删掉一行,必须要i<4才行。 后面的 j 我想明白了,可是应该是同样的道理,i<3也应该能执行到[3],也就是第四行啊? 
      

  5.   


    谢谢  不过还是不明白 这一行for(int i=0;i<4;++i)     如果我改成i<3     矩阵会被删掉一行,必须要i<4才行。 后面的 j 我想明白了,可是应该是同样的道理,i<3也应该能执行到[3],也就是第四行啊? 
      

  6.   


    谢谢  不过还是不明白 这一行for(int i=0;i<4;++i)     如果我改成i<3     矩阵会被删掉一行,必须要i<4才行。 后面的 j 我想明白了,可是应该是同样的道理,i<3也应该能执行到[3],也就是第四行啊? 
      

  7.   

      34  for(j=0;j<3;++j)  
      35           System.out.printf(a[i][j]+",");  
      36      System.out.println(a[i][j]);  
    楼主,如果在这里把j<3 改成j<4,Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at Question1_7.Question1_7.main(Question1_7.java:36)
    就会出现报错,楼主要仔细观察报错语句的提示,这句话意思即为:异常 数组越界了 越界的值为4
    并且是在这个类中的第36句。
    根据这个提示很容易锁定问题所在。即:关于j的循环,0,1,2,3当循环结束时j的值为4.然后在36句出现数组越界的问题。
      

  8.   


    谢谢  不过还是不明白 这一行for(int i=0;i<4;++i)     如果我改成i<3     矩阵会被删掉一行,必须要i<4才行。 后面的 j 我想明白了,可是应该是同样的道理啊 ,i<3也应该能执行到[3],也就是第四行啊? 
      

  9.   


    谢谢  不过还是不明白 这一行for(int i=0;i<4;++i)     如果我改成i<3     矩阵会被删掉一行,必须要i<4才行。 后面的 j 我想明白了,可是应该是同样的道理,i<3也应该能执行到[3],也就是第四行啊? 真晕,说到这种程度你还是不理解?
    把main函数里面改成这样你是不是就好理解了。 public static void main(String[] args) {
    int[][] a = { { 1, 2, 3, 4 }, { 0, 3, 9, 5 }, { 4, 6, 8, 3 },
    { 4, 6, 8, 3 } };
    // setZero(a);
    setZeros(a);
    for (int i = 0; i < 4; ++i) {
    int j;
    for (j = 0; j < 4; ++j)
    // 很奇怪 明明是4*4的 矩阵,为什么这里j<4就会报错,我觉得就应该是j<4
    System.out.printf(a[i][j] + ",");
    System.out.println();
    }
    }
      

  10.   


    谢谢  不过还是不明白 这一行for(int i=0;i<4;++i)     如果我改成i<3     矩阵会被删掉一行,必须要i<4才行。 后面的 j 我想明白了,可是应该是同样的道理,i<3也应该能执行到[3],也就是第四行啊? 真晕,说到这种程度你还是不理解?
    把main函数里面改成这样你是不是就好理解了。 public static void main(String[] args) {
    int[][] a = { { 1, 2, 3, 4 }, { 0, 3, 9, 5 }, { 4, 6, 8, 3 },
    { 4, 6, 8, 3 } };
    // setZero(a);
    setZeros(a);
    for (int i = 0; i < 4; ++i) {
    int j;
    for (j = 0; j < 4; ++j)
    // 很奇怪 明明是4*4的 矩阵,为什么这里j<4就会报错,我觉得就应该是j<4
    System.out.printf(a[i][j] + ",");
    System.out.println();
    }
    }
       终于明白了 非常感谢!刚开始学很多地方都不太适应。