我做了一个矩阵,我想通过添加你所在位置的值和正确值的值来改变原始值的值。例如,位置[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("");
}
}
}
答案 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