Java-添加2d数组的两个值

时间:2017-12-12 11:27:47

标签: java

我做了一个矩阵,我想通过添加你所在位置的值和正确值的值来改变原始值的值。例如,位置[0] [0]的新值应为[0] [0](原始值)+ [0] [1]。当没有值时,它应该只是添加0.但是当我这样做时,我得到这个错误ArrayIndexOutOfBoundsException。那么有人知道如何解决这个问题吗?那是我的代码:

public class Matrix {

    public static void main(String[] args) {

        int[][] matrix = { { 1, 8, 1 }, { 4, 2, 4 }, { 1, 8, 1 } };
        print(matrix);

        System.out.println("\n");
        int[][] blur = blurMatrix(matrix);
        print(blur);
    }

    public static int[][] blurMatrix(int[][] matrix) {
        if (matrix == null)
            return null;
        if (matrix.length <= 0)
            return null;

        int[][] blur = new int[matrix.length][];

        for (int row = 0; row < blur.length; row++) {
            blur[row] = new int[matrix[row].length];

            for (int col = 0; col < blur[row].length; col++) {
                blur[row][col] = (matrix[row][col] + matrix[row][col + col]);
                if (blur[row] == null)
                    return null;
                // if(blur[col]==null)return null;
            }
        }
        return blur;
    }

    public static void print(int[][] m) {
        if (m == null) {
            System.out.print(" no matrix to print!");
            return;
        }
        for (int row = 0; row < m.length; row++) {
            for (int col = 0; col < m[row].length; col++) {
                System.out.print(m[row][col] + "  ");
            }
            System.out.println("");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

当您执行矩阵[row] [col + col] 时,您正试图读出矩阵。它也应该是 matrix [row] [col + 1] 。 除了最后一个应该保持不变的列之外,你需要对所有列进行模糊处理。

这可以解决您的问题:

  public static int[][] blurMatrix(int[][] matrix){
    if(matrix == null || matrix.length <= 0)
      return null;

    int[][] blur = new int[matrix.length][];

    for(int row =0; row < blur.length; row++) {
      blur[row]= new int[matrix[row].length];

      // for all cols except the last one (we do not modify the last row)
      for(int col=0; col<blur[row].length-1; col++) {
        int cellValue = matrix[row][col];
        int nextCellValue = matrix[row][col+1];
        blur[row][col] = cellValue + nextCellValue;
      }

      // for the last column
      int lastColumnIndex = blur[row].length-1;
      blur[row][lastColumnIndex]= matrix[row][lastColumnIndex];
    }
    return blur;
  }

编辑:要在另一个方向执行

  public static int[][] blurMatrix(int[][] matrix){
    if(matrix == null || matrix.length <= 0)
      return null;

    int[][] blur = new int[matrix.length][];

    for(int row =0; row < blur.length; row++) {
      blur[row]= new int[matrix[row].length];

      // for all cols except the first one (we do not modify the first row)
      for(int col=blur[row].length-1; col>0; col--) {
        int cellValue = matrix[row][col];
        int previousCellValue = matrix[row][col-1];
        blur[row][col] = cellValue + previousCellValue;
      }

      // for the first column
      blur[row][0] = matrix[row][0];
    }
    return blur;
  }

编辑将2种模糊方法应用于原始矩阵

我认为你正在做的是按顺序应用2种模糊方法

int[][] blur = blurMatrix1(matrix);
print(blur);
System.out.println("");
blur = blurMatrix2(blur);
print(blur);

导致 第一次通过后 9 9 1
6 6 4
9 9 1

第二次通过后 9 18 10
6 12 10
9 18 10

您似乎想要做的是在原始方法上应用2种方法,然后将它们相加

int[][] blur1 = blurMatrix1(matrix);
print(blur1);
System.out.println("");
int[][] blur2 = blurMatrix2(matrix);
print(blur2);
System.out.println("");

导致 第一次模糊 9 9 1
6 6 4
9 9 1

第二次模​​糊
1 9 9
4 6 6
1 9 9

现在,如果你添加它们,你就得到了 10 18 10
10 12 10
10 18 10