繁体   English   中英

Java对象数组打印为空?

[英]Java Object Array printing null?

我有3个类, Movie ,用于将Movie对象添加到MovieDatabase Movie ,但它始终显示null。

当我添加2部Movies就像删除了第一部Movie一样,它显示为null 还有一种方法可以检查数组中的位置是否为空,如果为空则不打印?

这是我的Movie

public class Movie {

    private String name;  
    private String director;
    private double fileSize;               
    private int duration;
    private int moviecount;

    public Movie()
    {
        name = null;
        director = "";
        fileSize = 0;
        duration = 0;
    }

    public void setName(String newName)
    {
        name = newName;
    }

    public String getName()
    {
        return name;
    }

    public void setDirector(String newDirector)
    {
        director = newDirector;
    }

    public String getDirector()
    {
        return director;
    }

    public void setfileSize(double newfileSize)
    {
        fileSize = newfileSize;
    }

    public double getfileSize()
    {
        return fileSize;
    }

    public void setDuration(int newDuration)
    {
        duration = newDuration;
    }

    public int getDuration()
    {
        return duration;
    }

这是我的MovieDatabase类:

public class MovieDatabase
{
    private Movie[] mov;
    private int i;
    public int count=0;

    public MovieDatabase()
    {
        mov = new Movie[4];
        i=0;
    }

    public void addData(String name, String director, double fileSize, int duration)
    {
        for(int i=0; i<4; i++)
        mov[i] = new Movie();
        setData(mov[i],name,director,fileSize,duration);
        i++;
        count++;
    }
    private void setData(Movie m,String name, String director, double fileSize, int duration)
    {
            mov[i].setName(name);
            mov[i].setDirector(director);
            mov[i].setfileSize(fileSize);
            mov[i].setDuration(duration);
    }
    public void printNames()
    {
        for (int i = 0; i < mov.length; i++) 
        {
        System.out.println(mov[i].getName());
        }

    }
}





import java.util.*;
public class Interface {
Scanner console = new Scanner(System.in);
MovieDatabase m = new MovieDatabase();
private void run() 
{

int option;



    do{
        System.out.print("Add Movie(0), Delete Movie(2),Show Movies(3),Movie Count(4) \n");
        option = console.nextInt();

        switch(option)
        {
            case 0: addMovie();
                    break;

            case 3: printMovies();
                    break;



        }
    }        

        while(option!=9);

}
public static void main(String[] args){
 Interface intFace = new Interface();
intFace.run();
}

public void addMovie()
{
    String name, director;
    double fileSize; 
    int duration;

    System.out.println("Movie Name: ");
    name = console.next();
    System.out.println("Movie Director: ");
    director = console.next();
    System.out.println("Movie File Size: ");
    fileSize = console.nextDouble();
    System.out.println("Movie Duration: ");
    duration = console.nextInt();
    System.out.print("Movie Added!");


    m.addData(name,director,fileSize,duration);
}
public void printMovies()
{
    m.printNames();
}

}

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

问题在于这些行

....
public void addData(String name, String director, double fileSize, int duration)
{
    for(int i=0; i<4; i++)
    mov[i] = new Movie();
    ...

每次添加新数据时,都通过为数组中的每个元素分配新的影片对象来擦除所有以前的记录。 这将擦除所有先前的数据。

您应该在MovieDatabase构造函数中移动这两行。 或更好的选择是在设置数据时初始化它们。

...
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);
}
...

还有一种方法可以检查数组中的位置是否为空,如果为空则不打印?

您可以在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设置数据。

将您的setData更改为

m.setName(name);
m.setDirector(director);
m.setfileSize(fileSize);
m.setDuration(duration);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM