/ / obtenga 8x8 array de 512x512 array y proceselo - java, android, arrays

obtenga una matriz 8x8 de una matriz 512x512 y procésela - java, android, matrices

Soy nuevo con java Sigo desarrollando una imagenprograma de marca de agua usando DCT y SVD en Android, mi programa obtiene una matriz 8x8 de la matriz principal, hace DCT y SVD en una matriz 8x8 y la devuelve a la matriz principal Para fines de simulación, creo una matriz 4x4 y trato de obtener una matriz 2x2. Este es mi código:

double[][] mainArray = new double[4][4];
double[][] subArray = new double[2][2];
double value = 1;
for (int i = 0; i < mainArray.length; i++){
for(int j = 0; j <mainArray[0].length; j++){
mainArray[i][j] = value;
value++;
}
}

//get 2x2 array from 4x4 array
int row = 0; int column = 0;
for (int m = 0; m < mainArray.length / 2; m++){
for(int n = 0; n < mainArray[0].length / 2; n++){
subArray[0][0] = mainArray[column][row]; subArray[0][1] = mainArray[column][row+1];
subArray[1][0] = mainArray[column+1][row]; subArray[1][1] = mainArray[column+1][row+1];
row += 2;
column+2;
System.out.print(subArray[0][0] + " " + subArray[0][1] + " " + subArray[1][0] + " " + subArray[1][1]);
}
}

El resultado que quiero son:

1st iterate[1 2]  2nd iterate[3 4]
[5 6]             [7 8]

3rd iterate[ 9 10] 4th iterate[11 12]
[13 14]            [15 16]

pero como resultado obtuve la excepción BoundException Por favor, ayúdame, ¿qué está mal en mi código?

Respuestas

0 para la respuesta № 1

Estás cerca, pero te faltan algunas cosas. El error de índice fuera de límites se debe a que la columna nunca se restablece a cero, está obligado a salir de los límites sin importar qué, porque nunca se restablece. La variable de la fila también debe establecerse en el bucle externo, no en el interno con su código, ya que se actualizaría demasiado a menudo de la manera en que lo tiene ahora. Usted también tiene la columna y la fila confundido, creo. Es mainArray [fila] [columna].

También puedes usar tus contadores para filas y columnas.en la que m es la fila y n la columna e incrementa ambos en dos en este ejemplo, de esta manera no tienes que crear variables innecesarias. Ten en cuenta que con este enfoque deberías cambiar la condición para eliminar el / 2 en la declaración de condición.

for (int row = 0; row < (mainArray.length); row += 2) {
for (int column = 0; column < mainArray[0].length; column+=2) {
subArray[0][0] = mainArray[row][column];
subArray[0][1] = mainArray[row][column + 1];
subArray[1][0] = mainArray[row + 1][column];
subArray[1][1] = mainArray[row + 1][column + 1];
//column += 2;
System.out.print(subArray[0][0] + " " + subArray[0][1] + "n"
+ subArray[1][0] + " " + subArray[1][1] + "n");
}
}