因此,我一直在尝试解决以下问题:

给定一个二维数组(矩阵)和两个数字:i和j。在矩阵内交换索引为i和j的列。

输入包含矩阵维数n和m,不超过100,然后是矩阵元素,然后是索引i和j。

样本输入1:


3 4
11 12 13 14
21 22 23 24
31 32 33 34
0 1


样本输出1:


12 11 13 14
22 21 23 24
32 31 33 34


为了解决这个问题,我编写了以下代码:

import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int rows = scanner.nextInt();
        int tables = scanner.nextInt();
        int[][] matrix = new int[rows][tables];

        int i = scanner.nextInt();
        int j = scanner.nextInt();

        for (int w = 0; w < rows; w++){
            int temp = matrix[w][i];
            matrix[w][i] = matrix[w][j];
            matrix[w][j] = temp;
        }

        System.out.print(matrix);
    }
}


错误是线程``main''中的Exception java.lang.ArrayIndexOutOfBoundsException:Main.main(Main.java:15)的长度4的索引11出界。

可能是什么问题和解决方案?

最佳答案

线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:在Main.main(Main.java:15)处长度为4的索引11超出范围。

出现上述错误是因为您直接将值读入i和j,但是却忘记了在矩阵[] []中设置值,正如文斯和吉姆在评论中所说。

使用循环来设置值

  for(int k=0;k<rows;k++){
      for(int l=0;l<cols;l++){
             matrix[k][l]=scanner.nextInt();
      }
   }


然后遍历行以交换值

代码在这里

直播:https://onlinegdb.com/rJJ-kMTUL

import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int rows = scanner.nextInt();
        int cols = scanner.nextInt();
        int[][] matrix = new int[rows][cols];
        for(int k=0;k<rows;k++){
         for(int l=0;l<cols;l++){
             matrix[k][l]=scanner.nextInt();
         }
        }
        int i = scanner.nextInt();
        int j = scanner.nextInt();
        for(int k=0;k<rows;k++){
        int temp =  matrix[k][i];
        matrix[k][i] = matrix[k][j];
        matrix[k][j]=temp;
        }
         for(int k=0;k<rows;k++){
         for(int l=0;l<cols;l++){
             System.out.print( matrix[k][l]+" ");
         }
         System.out.println();
        }
    }
}

10-08 08:55
查看更多