-1

配列の配列があるとします:

double[][] img = new double[row][col];

2x2ブロックでimgをループしたい...例:

2,  4, 31, 31   
3,  3, 21, 41
1,  2, 10, 20
3,  2, 20, 30

次に、最初の 2x2 サブアレイ (左上から) を見ることから始めます。

2,  4
3,  3

次に、次の 2x2 ブロックを見ていきます

31,  31
21,  41

他のブロックは 1,2,3,2 および 10,20,20,30... になります。

このようにループを作成するにはどうすればよいですか? 基本的に私はこれを行っているので、ブロック内の値の平均を見つけ、配列内の各要素をその平均で置き換えることができます。

4

3 に答える 3

3

forネストされたループが 2 つ必要です。ただし、通常のforループとは異なり、ループ変数をインクリメントする代わりに、どちらの場合もインデックスに 2 を追加します。次に、内側の for ループ内で、ループ インデックスiおよびがあると仮定して、、 、、およびjで 4 つの値を参照します。ただし、 orが奇数の場合は注意が必要です。img[i][j]img[i + 1][j]img[i][j + 1]img[i + 1][j + 1]rowcol

于 2013-03-01T20:26:59.823 に答える
2

次のような構造を使用できます。

double[][] img = new double[row][col];
//This will break if row or col are odd, make sure you are always passing an even amount or check for this case.
for (int i = 0; i < row; i+=2) {
    for (int j = 0; j < col; j+=2) {
        //Do what you need with these values:
        img[i][j];     //Top left
        img[i+1][j];   //Top right
        img[i][j+1];   //Bottom left
        img[i+1][j+1]; //Bottom right
    }
}
于 2013-03-01T20:27:22.763 に答える
1

これはあなたを助けるかもしれません:

tile = 2;
for(i = 0; i < row; i = tile + i)
 for(j = 0; j < col; j= tile + j)
  for(r = 0; r < tile; r++)   
    for(c = 0; c < tile; c++) 
      System.out.print(" " + img[i+r][j+c]);
    System.out.print("\n");

tile他のサイズが必要な場合はサイズを入れてください 2*2:

編集
今、私は完全なコードを提供しています。

class BreakWithLabelDemo {
    public static void main(String[] args) {

        int[][] img = { 
                    {55, 60, 65, 1},
                    {95, 90, 85, 5},
                    {5,  0,  8,  5},  
                    {53, 60, 89, -5}
        };


        int tile=2; 
        int row=4; 
        int col=4;
        int i, r;
        int j, c;

        tile = 2;
        for(i = 0; i < row; i= tile + i)
           for(j = 0; j < col; j= tile + j){
              for(r = 0; r < tile; r++){   
                 for(c = 0; c < tile; c++) 
                    System.out.print(" ", img[i+r][j+c]);
                 System.out.println("");
              }
              System.out.println("\n");
           }



        int img2[][] = { 
                  // 1   2   3   4  5  6  7  8  9 
                    {55, 60, 65, 1, 2, 4, 1, 4, 0},
                    {95, 90, 85, 5, 3, 6, 5, 0, 8},
                    {5,  0,  8,  5,-1, 2, 2, 5, 6},  
                    {95, 90, 85, 5, 3, 6, 5, 0, 8},
                    {55, 60, 65, 1, 2, 4, 1, 4, 0},
                    {5,  0,  8,  5,-1, 2, 2, 5, 6},  
                    {1,  2,  3,  4, 5, 6, 7, 8, 9}, 
                    {1,  2,  3,  4, 5, 6, 7, 8, 9}, 
                    {1,  2,  3,  4, 5, 6, 7, 8, 9}
                  };

         row = 9; 
         col = 9;
         tile = 3;

         for(i = 0; i < row; i= tile + i)
           for(j = 0; j < col; j= tile + j){
              for(r = 0; r < tile; r++){   
                 for(c = 0; c < tile; c++) 
                    System.out.print(" ", img[i+r][j+c]);
                 System.out.println("");
              }
              System.out.println("\n");
           }
    }
}

これは実際に機能しています:

実行中のインスタンス

 55  60 
 95  90 


 65   1 
 85   5 


  5   0 
 53  60 


  8   5 
 89  -5 


 55  60  65 
 95  90  85 
  5   0   8 


  1   2   4 
  5   3   6 
  5  -1   2 


  1   4   0 
  5   0   8 
  2   5   6 


 95  90  85 
 55  60  65 
  5   0   8 


  5   3   6 
  1   2   4 
  5  -1   2 


  5   0   8 
  1   4   0 
  2   5   6 


  1   2   3 
  1   2   3 
  1   2   3 


  4   5   6 
  4   5   6 
  4   5   6 


  7   8   9 
  7   8   9 
  7   8   9 
于 2013-03-01T20:26:52.137 に答える