【问题标题】:How to build array inside private fuction from null?如何在私有函数中从 null 构建数组?
【发布时间】:2019-06-01 08:21:23
【问题描述】:

我试图在从公共函数获取空数组的私有函数内部构建数组,我从公共函数调用私有函数,然后尝试创建arr[i][j] = 1,然后递归将添加到int j +1,但是当我执行 arr[i][j] = 1 时出现运行时错误:NullPointerException,我不知道 arr[0].length ,我只知道 arr.length 是 n ,有什么解决办法吗?

public static int howManySorted(int n, int max) 
{
     int i = 0;
     int j = 0;
     boolean first = false;
     int count = 0;
     int[][] arr = new int[n][];



     return howManySorted(n,max,arr,i,j,first,count);
}
private static int howManySorted(int n,int max,int[][] arr,int i,int j,boolean first,int count)
{
    if(n < 1)
        return 0;

    if(j < n)
    {
        arr[i][j] = 1;
        count++;
        first = true;
        return howManySorted(n,max,arr,i,j+1,first,count);
    }

【问题讨论】:

    标签: java arrays function recursion multidimensional-array


    【解决方案1】:

    通过修改代码行,异常消失

    int[][] arr = new int[n][];
    


    int[][] arr = new int[n][n];
    

    当您执行new int[n][] 时,它会创建一个nulls 数组,执行arr[i][j] 就像执行null[j] 一样会导致NullPointerException

    或者,您也可以这样做,

    arr[i] = new int[10];  // initialize internal array 
    

    做之前

    arr[i][j] = 1 // assign value
    

    【讨论】:

      【解决方案2】:

      这样初始化的数组

      int[][] arr = new int[n][];
      

      未完全初始化,您无法为单元格赋值。 这个定义等于:“一个数组,每个单元格都被定义为一个数组”所以每个单元格也需要初始化(它不必是相同的大小) 您需要像这样完全初始化数组数组:

      int[][] arr = new int[n][n];  // a nxn sized matrix
      

      或者,您可以像这样单独初始化每一行:

      arr[0] = new int[n];  // initialized one cell of arr
      

      【讨论】:

      • 谢谢,我需要 arr[0] 的第二个
      猜你喜欢
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2017-09-10
      • 2010-10-09
      相关资源
      最近更新 更多