【问题标题】:How to return an empty array instead of null array?如何返回一个空数组而不是空数组?
【发布时间】:2016-06-27 02:51:43
【问题描述】:

我正在尝试返回一个数组,但出现“空指针异常”。我想这是因为我的方法返回了一个包含null 元素的数组。如何正确返回一个空数组?

在主类main方法中:

public class Test{
public static void main(String[] args){
    int s = 0;
    Project arr[] = new Project[3];
    for(int i = 0; i!=3; i++){

        Project var = Project.getProject(arr, "Programming");
        if (var == null){
            var = new Project();
            var.setName("Programming");
            arr[s]= var;
            s=s+1;
        }
    }
}
}

单独类中的方法:

static Project getProject(Project[] a, String n) {
    for (int i = 0; i != a.length; i++)
    {
        if(a[i].getName().equals(n))
            return a[i];
    }
    return null;
}

例外:

Exception in thread "main" java.lang.NullPointerException
at Project.getProject(Project.java:12)
at Test.main(Test.java:7)

【问题讨论】:

  • 代码中没有方法返回数组。只要没有返回数组的方法,就不可能返回空数组。就您的意图而言,您有一个变量s,它在概念上表示列表的大小,即数组中非null 条目的数量。因此,您应该将该数字作为另一个参数传递给您的 getProject 方法,并让该方法仅迭代到 s 而不是 array.length

标签: arrays class java-7 static-methods


【解决方案1】:

我认为您的困惑是因为不了解数组 elements 的初始化内容。这与数组本身为null 无关,但它与数组元素为null 有关。

查看main 方法中的Project arr[] = new Project[3]; 行。当这一行被 Java解释时,一个长度为 3 的数组就存在了。名为 arridentifier 现在具有 non-null 值。这个标识符(或引用)现在指向存储数组元素的内存。但是那些数组元素本身被初始化为什么值?

是的,null

因此,在这个时间点,arr[0] = arr[1] = arr[2] = null

现在,在Project var = Project.getProject(arr, "Programming"); 行,您将此引用arr 发送到方法getProject,该方法尝试遍历该数组。当i is 0a[i] = a[0] = null!在这个null 参考中,您的代码最终调用getName(),这就是您获得NullPointerException 的原因。

您的意图似乎很简单,但不知何故因为一些复杂的实现,已经创建了这种代码。您应该简单地初始化数组实例。在 Java 中有很多很好的方法可以做到这一点,但可以从这里开始:

    String[] names = new String[]{"Programming", "Database", "Theory"};
    Project arr[] = new Project[3];
    for (int i = 0; i < arr.length; i++) {
        arr[i] = new Project();
        arr[i].setName(names[i]);
    }

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 2019-06-05
    • 2019-05-14
    • 2013-07-22
    • 2018-07-30
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多