【问题标题】:Error message Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:线程“main”java.lang.ArrayIndexOutOfBoundsException 中的错误消息异常:
【发布时间】:2012-10-29 02:36:09
【问题描述】:

我有此代码,但我不断收到此错误消息,我不知道为什么?

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 2 在 javaapplication28.JavaApplication28.main(JavaApplication28.java:38) 1 2 Java 结果:1

public static void main(String[] args) {   

    Scanner input = new Scanner(System.in);
        System.out.println("This program transposes a matrix.");
        System.out.println("Please enter the number of rows");
        int rows = input.nextInt();
        System.out.println("User enters: "+rows);
        System.out.println("Please enter the number of columns");
        int columns = input.nextInt();
        System.out.println("User enters: "+columns);
        int [][]matrix=new int[rows][columns];
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[i].length;j++){
             System.out.print("Enter value for row [" +i+ "] column [" +j+"]:");
                matrix[i][j]=input.nextInt();  
            }
        }
        for(int i=0;i<=matrix.length;i++){
             System.out.println();
             for(int j=0;j<=matrix.length;j++){
                 System.out.print(matrix[i][j]+"  ");           
             }
         }
        System.out.println("The transpose of this matrix has" +columns+"rows and"+rows+"columns and the transpose is:");
        for(int i=0;i<=matrix.length;i++){
             System.out.println();
             for(int j=0;j<=matrix.length;j++){
                 System.out.print(matrix[j][i]+"  ");
    }
}}
}

【问题讨论】:

    标签: java exception error-handling


    【解决方案1】:

    您从 0 到 length+1 i&lt;=matrix.length 循环运行。从 for 语句中删除 = 并在内部循环中添加:matrix[i].length 而不是 matrix.length 以获取列数而不是行数。

    这是有效的代码:

    for(int i=0;i<matrix.length;i++){
            System.out.println();
            for(int j=0;j<matrix[i].length;j++){
                System.out.print(matrix[i][j]+"  ");           
            }
        }
        System.out.println("The transpose of this matrix has" +columns+"rows and"+rows+"columns and the transpose is:");
        for(int i=0;i<matrix.length;i++){
            System.out.println();
            for(int j=0;j<matrix[i].length;j++){
                System.out.print(matrix[j][i]+"  ");
            }
        }}
    

    【讨论】:

    • 对于一般情况(参差不齐的数组)不应该是j&lt;matrix[i].length吗?
    • 另外,转置代码是错误的,除非矩阵总是正方形,否则不能像一般情况下那样交换索引。
    • @JimGarrison 很好,如果你进入第二个for i=0;所以你可以使用i0。同一件事情。的确,使用索引不是好的技术。对于这个例子,他有方阵。否则我可以用其他方式写。
    【解决方案2】:

    如果你从 0 开始你的 for 循环索引迭代器,你应该使用 &lt; 而不是 &lt;= 当它是数组的长度时,因为否则它就像你试图获得 (n +1) (size n) 数组的第 1 个元素导致ArrayIndexOutOfBoundsException 异常的原因是什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      相关资源
      最近更新 更多