2017-07-06 116 views
-1

我有一个Java方法fill0s(),其输入较小的矩阵到一个更大的矩阵,理应充满0:为什么创建空白矩阵返回null而不是0.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 

我的问题是:为什么功能n返回null而不是0.0?

回答

1

Double是一个包装类,如果未初始化,其值将为null。使用原始类型double,它会给你一个正确的结果。

8

由于Double是一类,因此Double的数组的默认值为null,而不是0.0。

您需要使用原始类型double或者显式初始化矩阵。

相关问题