【问题标题】:Duplicating every second row and every second column of a 2d array in java在java中复制二维数组的每一行和每一列
【发布时间】:2019-03-22 13:09:39
【问题描述】:

我有一个二维整数数组 我需要使用java复制二维数组的每一行和每一列,如下所示(覆盖现有值,而不是创建新列/行):

example

目前的方法

     for(int i = 0; i < result.get(z).getWidth()-2; i+=1)
    {   for(int j = 0; j < result.get(z).getHeight()-2; j+=1)
    {   
        x[i+1][j] = result.get(z).getRGB(i, j);
        x[i][j+1] = result.get(z).getRGB(i, j);
        x[i+1][j+1] = result.get(z).getRGB(i, j);




    }

}

【问题讨论】:

  • 根据我的尝试进行了编辑。
  • 为什么i+2 值应该只复制一个单元格? --- 为什么i+=1 应该只处理所有其他值?
  • 更新了原帖。

标签: java arrays loops duplicates 2d


【解决方案1】:

替代方法:

private static void duplicateAlternates(int[][] matrix) {
    for (int row = 0; row < matrix.length; row += 2)
        for (int col = 1; col < matrix.length; col += 2)
            matrix[row][col] = matrix[row][col - 1];
    for (int row = 1; row < matrix.length; row += 2)
        for (int col = 0; col < matrix.length; col++)
            matrix[row][col] = matrix[row - 1][col];
}

测试

public static void main(String[] args) {
    int[][] matrix = { {  10,  17, 200, 255,   0 },
                       {   0, 199, 100,  30,  45 },
                       { 250,  23, 177, 180,  79 },
                       {   0,   9,  14, 150,  70 },
                       {  50,  55, 187,  10, 233 } };
    print(matrix);
    duplicateAlternates(matrix);
    print(matrix);
}
private static void print(int[][] matrix) {
    for (int row = 0; row < matrix.length; row++) {
        for (int col = 0; col < matrix[row].length; col++)
            System.out.printf(" %3d", matrix[row][col]);
        System.out.println();
    }
    System.out.println();
}

输出

  10  17 200 255   0
   0 199 100  30  45
 250  23 177 180  79
   0   9  14 150  70
  50  55 187  10 233

  10  10 200 200   0
  10  10 200 200   0
 250 250 177 177  79
 250 250 177 177  79
  50  50 187 187 233

【讨论】:

    【解决方案2】:

    if/else 的另一种方法:

    private static void duplicateAlternatesWithIfElse(int[][] matrix) {
            for (int row = 0; row < matrix.length; row++) {
                for (int col = 0; col < matrix.length; col++) {
                    if ((row - 1) % 2 == 0) {
                        matrix[row][col] = matrix[row - 1][col];
                    } else if ((col - 1) % 2 == 0) {
                        matrix[row][col] = matrix[row][col - 1];
                    }
                }
            }
        }
    

    使用 main 函数进行测试:

    public static void main(String[] args) {
            int[][] twoDimArray = { 
                    { 10, 17, 200, 255, 0 }, 
                    { 0, 199, 100, 30, 45 }, 
                    { 250, 23, 177, 180, 79 },
                    { 0, 9, 14, 150, 70 }, 
                    { 50, 55, 187, 10, 233 } 
            };
    
            printMatrix(twoDimArray);
            duplicateAlternatesWithIfElse(twoDimArray);
            printMatrix(twoDimArray);
    
        }
    

    输出:

      10  17 200 255   0
       0 199 100  30  45
     250  23 177 180  79
       0   9  14 150  70
      50  55 187  10 233
    
      10  10 200 200   0
      10  10 200 200   0
     250 250 177 177  79
     250 250 177 177  79
      50  50 187 187 233
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-04
      • 2021-08-13
      • 2016-12-07
      • 2018-08-30
      • 1970-01-01
      • 2016-03-19
      • 2021-05-18
      • 2016-02-13
      相关资源
      最近更新 更多