Как поменять местами столбцы с указанными c индексами в java 2d массивах? - PullRequest
0 голосов
/ 28 марта 2020

Итак, я пытался решить следующую проблему:

С учетом двумерного массива (матрицы) и двух чисел: 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" java .lang.ArrayIndexOutOfBoundsException: индекс 11 из ограничения длины 4 в Main.main (Main. java: 15).

В чем может быть проблема и решение?

1 Ответ

0 голосов
/ 28 марта 2020

Исключение в потоке "main" java .lang.ArrayIndexOutOfBoundsException: индексировать 11 за пределами длины 4 в Main.main (Main. java: 15).

Выше ошибка, потому что вы непосредственно читаете значения в i и j, но вы забыли установить значения внутри матрицы [] [], как сказали vince и jim в комментариях.

Используйте l oop для установки значения

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

, а затем l oop через строки для обмена значениями

Здесь идет код

Live: 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();
        }
    }
}
...