写一个打印矩形矩阵的程序:
结果类似:1 2 3 4
         2 3 4 1
         3 4 1 2
         4 1 2 3我的源码如下:
import javax.swing.JOptionPane;public class HomeWork3
{
public static void main(String args[])
    {
int i = Integer.parseInt(JOptionPane.showInputDialog("Please input the LENGTH:"));

int a[][] = new int[i][i];

for (int k = 0; k < i; k++)
{
a[1][k] = k+1;
System.out.print(a[1][k]);
System.out.print(' ');
}

for (int m = 2; m <= i;  m++)
{
for (int n = 0; n < i; n++)
{
a[m][n] = a[m-1][n+1];
System.out.print(a[m][n]);
System.out.print(' ');
}
}
}
}编译时没有问题,可是运行时报错了:
1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 Exception in thread "main" java.lang.Arr
ayIndexOutOfBoundsException: 10
        at HomeWork3.main(HomeWork3.java:22)
------------------------------------------------------
Ps:22行指的是"a[m][n] = a[m-1][n+1];"这里.
------------------------------------------------------
希望能尽快解决 谢谢了!

解决方案 »

  1.   

    Array Index Out Of Bounds
      

  2.   

    java的array是从0开始,n-1是最后一个元素。
    改成下面的样子,没错了,但是打不出你要的结果,你自己再看看吧package mynet;import javax.swing.JOptionPane;public class HH {
    public static void main(String args[]) {
    int i = Integer.parseInt(JOptionPane
    .showInputDialog("Please input the LENGTH:")); int a[][] = new int[i][i];

    for (int k = 0; k < i; k++) {
    a[1][k] = k + 1;
    System.out.print(a[1][k]);
    System.out.print(' ');
    } for (int m = 2; m < i; m++) {
    for (int n = 0; n < i-1; n++) {
    a[m][n] = a[m - 1][n + 1];
    System.out.print(a[m][n]);
    System.out.print(' ');
    }
    }
    }
    }
      

  3.   

    a[m][n] = a[m-1][n+1];
    数组下标越界了!!!
    如果你在命令行输入的是4,那么"for (int n = 0; n < i; n++)"中你的i的值就是4,
    而你的"a[m][n] = a[m-1][n+1]"中的n+1的值已经超出了你的数组元素的索引最大值,
    改改吧!
      

  4.   

    /*-----------------------------
    关键语句:
     a[i][j] = a[i-1][j+1>=a[max-1].length?0:j+1];
                      ==========================
                                ||
                      j+1>=a[max-1].length?0:j+1 
    -----------------------------
    */
    //源代码如下,再jb中测试通过
    import javax.swing.JOptionPane; class Untitled1
    {
            public static void main(String args[])
        {
                    int max = Integer.parseInt(JOptionPane.showInputDialog("Please input the LENGTH:"));                int a[][] = new int[max][max];           
                    
                    for (int k = 0; k < a[max-1].length; k++) {
                      a[0][k] = k + 1;
                      System.out.print(a[0][k]);
                      System.out.print(' ');
                    }
                    System.out.println("\n");
                    for (int i = 1; i < a.length;  i++)
                    {
                            for (int j = 0; j < a[max-1].length; j++)
                            {
                                    a[i][j] = a[i-1][j+1>=a[max-1].length?0:j+1];
                                    System.out.print(a[i][j]);
                                    System.out.print(' ');
                                  
                            } 
                            System.out.println("\n");
                    }        }
    }