我有一个Java方法 fill0s(),它将较小的矩阵输入到一个较大的矩阵中,据说填充了0:
public class PoolingFunctions {
// Fill needed spaces with 0
public static Double[][] fill0s(Double[][] image, int filter_size){
int columns_remaining = filter_size - (image[0].length%filter_size);
int rows_remaining = filter_size - (image.length%filter_size);
// CREATE A MATRIX: HERE LIES THE PROBLEM: //////////////////////////////
Double [][] blank_matrix = new Double [(image.length)+columns_remaining][(image[0].length)+rows_remaining];
for (int i = 0; i<image.length; i++) {
for (int j = 0; j<image[i].length; j++) {
blank_matrix[i][j] = image[i][j];
}
}
return blank_matrix;
}
}
调用此方法后:
public class MainPooling{
public static void main(String[] args) {
Double[][] image = { {1.0,1.0,1.0,1.0},
{1.0,1.0,1.0,1.0},
{1.0,1.0,1.0,1.0},
{1.0,1.0,1.0,1.0}
};
Double[][] formatted_image;
formatted_image = PoolingFunctions.fill0s(image,3);
TestMatricesJava.print2dMatrix(formatted_image);
}
}
我得到以下结果:
1.0 1.0 1.0 1.0 null null
1.0 1.0 1.0 1.0 null null
1.0 1.0 1.0 1.0 null null
1.0 1.0 1.0 1.0 null null
null null null null null null
null null null null null null
我的问题是:为什么函数返回null而不是0.0?
答案 0 :(得分:8)
由于Double
是一个类,因此Double
数组的默认值为null
,而不是0.0。
您需要使用基元类型double
或明确初始化矩阵。
答案 1 :(得分:1)
Double是一个包装类,如果没有初始化,它的值将为null。使用原始类型double,它会给你一个正确的结果。