[英]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.