我正在尝试翻转图像,而我的方法是逐行反转3X3矩阵中的元素。我正在使用称为矩阵的静态数组。
将值插入3 x 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循环中替换数组中的元素时,出现数组索引超出界限异常。任何人都可以在这里指导我。
答案 0 :(得分:2)
您有一个在matrix
中初始化的局部变量main
,但在swap
中使用的是全局变量,它是空的且大小为[0] [0]。
答案 1 :(得分:1)
我想数组初始化失败了,矩阵的一行中没有一个包含3个元素,但是您没有发布那部分代码。我已经复制了您发布的部分以及矩阵字段的初始化,并且一切正常!
private static int columns = 3;
private static int rows = 3;
private static Integer[][] matrix = {{1,2,3}, {4,5,6}, {7,8,9}};
public static void main(String[] args) {
for (int i = 0; i < rows; i++) {
ArrayList<Integer> store = new ArrayList<>();
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");
for (int c = 0; c < columns; c++) {
matrix[r][c] = list.get(c);
}
}
}
请附加整个代码,包括矩阵初始化,但是我很确定这就是问题所在。
答案 2 :(得分:0)
您是否已将矩阵大小指定为
az storage blob list --container-name $web --account-name mystorageaccount --query "[?properties.blobTier=='Cold'].{name:name}"
答案 3 :(得分:0)
为此找到了解决方案:
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);
Collections.reverse(store);
for (int j = 0; j < columns; j++) {
matrix[i][j] = store.get(j);
}
}
当我调用swap(...)时,我反转了列表“ store”并将结果存储在数组中,这也消除了调用swap(...)的必要性
感谢大家的支持。