Arrays 如何返回空数组而不是空数组?

Arrays 如何返回空数组而不是空数组?,arrays,class,java-7,static-methods,Arrays,Class,Java 7,Static Methods,我试图返回数组,但得到“空指针异常”。我想这是因为我的方法返回一个包含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(

我试图返回数组,但得到“空指针异常”。我想这是因为我的方法返回一个包含
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)

我认为您的困惑是因为不理解数组元素初始化为什么。这与数组本身为
null
无关,但与数组元素为
null
有关

查看行
项目arr[]=新项目[3]main
方法中的code>。当Java解释这一行时,一个长度为
3
的数组就存在了。名为
arr
标识符现在有一个
非空值。该标识符(或引用)现在指向存储数组元素的内存。但是这些数组元素本身被初始化为什么值

是,
null

因此,此时,
arr[0]=arr[1]=arr[2]=null

现在,在
projectvar=Project.getProject(arr,“编程”)
,则将此引用
arr
发送到试图迭代该数组的方法
getProject
。当
i为0
时,
a[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]);
    }
String[]names=新字符串[]{“编程”、“数据库”、“理论”};
项目arr[]=新项目[3];
对于(int i=0;i
我认为您的困惑是因为不理解数组元素初始化为什么。这与数组本身为
null
无关,但与数组元素为
null
有关

查看行
项目arr[]=新项目[3]main
方法中的code>。当Java解释这一行时,一个长度为
3
的数组就存在了。名为
arr
标识符现在有一个
非空值。该标识符(或引用)现在指向存储数组元素的内存。但是这些数组元素本身被初始化为什么值

是,
null

因此,此时,
arr[0]=arr[1]=arr[2]=null

现在,在
projectvar=Project.getProject(arr,“编程”)
,则将此引用
arr
发送到试图迭代该数组的方法
getProject
。当
i为0
时,
a[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]);
    }
String[]names=新字符串[]{“编程”、“数据库”、“理论”};
项目arr[]=新项目[3];
对于(int i=0;i
代码中没有返回数组的方法。只要没有返回数组的方法,就不可能返回空数组。就您的意图而言,您有一个变量
s
,它在概念上表示列表的大小,即数组中非
null
项的数量。因此,您应该将该数字作为另一个参数传递给
getProject
方法,并让该方法仅迭代到
s
,而不是
array.length
。代码中没有返回数组的方法。只要没有返回数组的方法,就不可能返回空数组。就您的意图而言,您有一个变量
s
,它在概念上表示列表的大小,即数组中非
null
项的数量。因此,您应该将该数字作为另一个参数传递给
getProject
方法,并让该方法仅迭代到
s
,而不是
array.length