Java 从512x512阵列获取8x8阵列并进行处理

Java 从512x512阵列获取8x8阵列并进行处理,java,android,arrays,Java,Android,Arrays,我是Java新手 我还在开发一个在Android中使用DCT和SVD的图像水印程序,我的程序从主阵列中获取8x8阵列,在8x8阵列中进行DCT和SVD,然后返回主阵列 出于模拟目的,我创建了一个4x4阵列,并尝试从中获取2x2阵列。 这是我的代码: double[][] mainArray = new double[4][4]; double[][] subArray = new double[2][2]; double value = 1; for (int i = 0; i < mai

我是Java新手 我还在开发一个在Android中使用DCT和SVD的图像水印程序,我的程序从主阵列中获取8x8阵列,在8x8阵列中进行DCT和SVD,然后返回主阵列 出于模拟目的,我创建了一个4x4阵列,并尝试从中获取2x2阵列。 这是我的代码:

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]);
    }
}
但结果我出局了
请帮帮我,我的代码出了什么问题

您很接近,但缺少一些东西。索引越界错误是因为列从未重置为零,无论发生什么情况,它都会越界,因为它从未重置。row变量也应该在代码的外部循环中设置,而不是在内部循环中设置,因为它会像现在这样频繁地更新。我相信你也把列和行搞混了。它是mainArray[行][列]

此外,您还可以使用行和列的计数器,m为行,n为列,并在本例中以2的增量递增,这样您就不必创建不必要的变量。请记住,使用这种方法,您必须更改条件以删除condition语句中的/2

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");
        }
    }
for(int行=0;行<(mainArray.length);行+=2){
对于(int column=0;column
我听不懂您的解释,请您用代码告诉我,而不是附加的代码版本。还有一些格式可以使println看起来更漂亮。
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");
        }
    }