1

私はこのコードを持っていますが、このエラーメッセージが表示され続け、理由がわかりません?

スレッド「メイン」の例外 java.lang.ArrayIndexOutOfBoundsException: 2 at 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]+"  ");
    }
}}
}
4

2 に答える 2

3

0 から length+1 までループで実行しますi<=matrix.length=ステートメントから削除しfor、内部ループで add: の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]+"  ");
        }
    }}
于 2012-11-08T20:10:59.353 に答える
0

forサイクル インデックス イテレータを 0から開始する場合は、それが配列の長さである場合は使用<しない<=でください。そうしないと、(サイズ n) 配列の (n+1) 番目の要素を取得しようとしているかのようになるためです。何がArrayIndexOutOfBoundsException例外を引き起こしているのか

于 2012-11-08T20:27:55.457 に答える