Java对象数组打印空?

Java对象数组打印空?,java,arrays,null,Java,Arrays,Null,我有3个类,Movie用于将Movie对象添加到in-Movie数据库中,但它会一直打印null 当我添加两部电影时,它就像第一部电影被擦除,而它打印为空。还有一种方法可以检查数组中的位置是否为空,如果为空则不打印吗 这是我的电影课 下面是我的电影数据库类: 我试图只包括相关部分,但到目前为止我所做的大部分工作都是相关的。问题在于这些方面 .... public void addData(String name, String director, double fileSize, int dur

我有3个类,Movie用于将Movie对象添加到in-Movie数据库中,但它会一直打印null

当我添加两部电影时,它就像第一部电影被擦除,而它打印为空。还有一种方法可以检查数组中的位置是否为空,如果为空则不打印吗

这是我的电影课

下面是我的电影数据库类:


我试图只包括相关部分,但到目前为止我所做的大部分工作都是相关的。

问题在于这些方面

....
public void addData(String name, String director, double fileSize, int duration)
{
    for(int i=0; i<4; i++)
    mov[i] = new Movie();
    ...
还有一种方法可以检查数组中的位置是否为空,如果为空则不打印吗

您可以在Movie类中创建一个方法,该方法检查此Movie对象是否为空,并返回适当的结果

public class Movie {
    ...
    ...
    public boolean isEmpty() {
        if(
            this.name.isEmpty() &&  
            this.director &&
            this.fileSize == 0 &&
            this.duration == 0 &&
            this.moviecount == 0
        )
            return true;
        else
            return false;
    }
    ...
    ...
}
现在,您可以使用以下方法检查此电影对象是否为空:

if(mov[i].isEmpty()) {
    //empty movie object
    ...
}
在setData中,始终设置mov[0]的值。类成员i将永远不会更改循环变量将其隐藏。您不使用参数m来设置数据

将设置数据更改为


您可以检查数组是否包含null,但您正在初始化addData中的空电影对象。您还将电影传递给setData,但根本不使用传入的对象,您只是直接访问数组。退一步想想,当你添加数据时,你可能不想创建很多空对象。addData和printNames内部for循环中的局部变量i隐藏了类MovieDatabase的字段i。字段i始终为0,因此调用setData总是更新第一个Movie对象,其余3个对象的名称都为空。可能不会将它们移动到构造函数。初始化空对象是没有用的。@RamanSahasi在System.out.printlnmov[i].getName@SamHoward,这可能是因为您没有设置所有4个对象,而是打印所有对象。如果是这种情况,那么您可能需要在构造函数中初始化它们。或者更好的方法是检查它是否为null,或者不只是使用ifmov[i]!=空System.out.printlnmov[i].getName;在printNames方法中。
...
public void addData(String name, String director, double fileSize, int duration)
{
    setData(mov[i],name,director,fileSize,duration);
    i++;
    count++;
}
private void setData(Movie m,String name, String director, double fileSize, int duration)
{ 
        mov[i] = new Movie(); //++ edit
        mov[i].setName(name);
        mov[i].setDirector(director);
        mov[i].setfileSize(fileSize);
        mov[i].setDuration(duration);
}
...
public class Movie {
    ...
    ...
    public boolean isEmpty() {
        if(
            this.name.isEmpty() &&  
            this.director &&
            this.fileSize == 0 &&
            this.duration == 0 &&
            this.moviecount == 0
        )
            return true;
        else
            return false;
    }
    ...
    ...
}
if(mov[i].isEmpty()) {
    //empty movie object
    ...
}
m.setName(name);
m.setDirector(director);
m.setfileSize(fileSize);
m.setDuration(duration);