簡體   English   中英

Java- 2d數組的兩個值的加法

[英]Java- Addition of two valus of a 2d Array

我做一個矩陣,我想通過添加您所處位置的值和其右眼的值來更改原始值的值。 例如,位置[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("");
        }
    }
}

當您執行matrix [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

您似乎想做的是將兩種方法應用於原始方法,然后將它們求和

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM