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

时间:2014-10-24 13:26:12

标签: 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 < 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]);
    }
}

我想要的结果是:

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

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

但是我得到了outofBoundException 请帮帮我,我的代码有什么问题

1 个答案:

答案 0 :(得分:0)

你很亲密,但遗漏了一些东西。索引超出界限错误是因为列永远不会重置为零,无论如何都必然会越界,因为它永远不会重置。行变量也应该在外部循环中设置,而不是在代码内部设置,因为它会像现在一样经常更新。我相信你也有混乱的列和行。它是mainArray [row] [column]。

此外,您可以将计数器用于行和列,其中m是行,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");
        }
    }
相关问题