Я пытаюсь перевернуть изображение, и мой подход состоит в том, чтобы переворачивать элементы матрицы 3X3 строка за строкой. Я использую статический массив с именем matrix .
После того, как я вставил значения в массив 3 на 3, я перебираю все строки массива и сохраняю значения в ArrayList. Затем я переставляю элементы в этом списке в отдельную функцию и пытаюсь вставить поменяемые значения в исходный массив в функцию (учитывая, что массив является статическим). Когда я пытаюсь это сделать, я получаю индекс из привязанного исключения. Я попробовал все с моей стороны, но эта проблема, кажется, не уходит. Вот мой код:
Я поместил операторы print, чтобы проверить размер списка, переданного, полученного и после замены.
import java.util.ArrayList;
import java.util.Scanner;
public class FlipAndInvert {
static int rows = 0;
static int columns = 0;
static int matrix[][] = new int[rows][columns];
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("Enter the dimensions of the array : ");
System.out.println("Enter # of Rows : ");
rows = input.nextInt();
input.nextLine();
System.out.println("Enter # of Columns : ");
columns = input.nextInt();
input.nextLine();
int matrix[][] = new int[rows][columns];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
System.out.print("Enter [" + i + "][" + j + "] : ");
int data = input.nextInt();
input.nextLine();
if (data == 0 || data == 1) {
matrix[i][j] = data;
} else {
System.out.println("Enter Binary Format");
}
}
}
for (int i = 0; i < rows; i++) {
ArrayList<Integer> store = new ArrayList<Integer>();
for (int j = 0; j < columns; j++) {
store.add(matrix[i][j]);
}
System.out.println("List Size Passed : " + store.size());
swap(store, i);
}
}
public static void swap(ArrayList<Integer> list, int r) {
int i = 0;
int j = list.size() - 1;
System.out.println("List Size Received : " + list.size());
if (list.size() % 2 == 1) {
// for odd list length
System.out.println("Inside if statememt");
while (j - i >= 2) {
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
i = i + 1;
j = j - 1;
}
System.out.println("List Size After Swap : " + list.size());
System.out.println("Outside while in if statememt");
System.out.println(matrix[0][0]);
} else {
// for even list length
while (j - i >= 1) {
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
i = i + 1;
j = j - 1;
}
for (int c = 0; c < columns; c++) {
matrix[r][c] = list.get(c);
}
}
}
}
Когда я заменяю элементы в массиве в последнем цикле for, я получаю исключение Array Index Out of Bound. Может кто-нибудь, пожалуйста, направьте меня сюда.