class main{...
while( FileParsers.hasNextMovie() ){
MovieData movie = FileParsers.getNextMovie();
System.out.println( movie );
/* fill the movie lists here */
UnsortedMovieList vag=new UnsortedMovieList();
vag.insert(movie);
}
unsortedmovielist的插入方法:
class UnsortedMovieList{...
public void insert(MovieData data){
MovieListNode node=new MovieListNode(data.getId(),data.getTitle(),data.getYear(),data.getRating(),data.getVotes(),data.getDuration(),data.getGenres());
if(isEmpty()){
tail=node;
}else{
head.setPrevious(node);
}
node.setNext(head);
head=node;
size++;
}
和MovieListNode类(对不起大小):
public class MovieListNode {
private int id;
private String title;
private int year;
private double rating;
private int votes;
private int duration;
private ArrayList<genre_t> genres;
private int i=0;
private MovieListNode previous;
private MovieListNode next;
public MovieListNode(){}
public MovieListNode(int id, String title, int year, double rating, int votes, int duration, ArrayList<genre_t> genres) {
this.id=id;
this.title=title;
this.year=year;
this.rating=rating;
this.votes=votes;
this.duration=duration;
this.genres=genres;
}
public int getId() {return id;}
public String getTitle() {return title;}
public int getYear() {return year;}
public double getRating() {return rating;}
public int getVotes() {return votes;}
public int getDuration() {return duration;}
public ArrayList<genre_t> getGenres() {return genres;}
public MovieListNode getPrevious() {return previous;}
public MovieListNode getNext() {return next;}
public void setNext(MovieListNode next) {this.next=next;}
public void setPrevious(MovieListNode previous) {this.previous=previous;}
}
当我这样做时,我会在行NullPointerException
中获得MovieListNode node=new MovieListNode(data.getId(),data.getTitle(),data.getYear(),data.getRating(),data.getVotes(),data.getDuration(),data.getGenres())
。相反,如果我写'MovielistNode node=new MovielistNode();'
我不会得到任何错误,但这不是我想要的。
如果有人可以帮助我会很感激。谢谢。 (如果你想了解我代码中有关某些内容的更多信息,请告诉我们)
答案 0 :(得分:0)
MovieData
对象中的一个或所有字段为空。您需要调查您的方法:
FileParsers.getNextMovie();
使用此方法初始化类型为MovieData
的对象如果此方法未使用初始化所有数据字段的构造函数声明并初始化MoveData
对象,然后返回该对象,当您尝试拨打NullPointer
getters
可能是genres
,因为其他字段都有默认初始化。
<强>更新强>
在Fileparsers
课程中。我注意到getNextMovie()
方法中的代码:
if( dataLine==null || genresLine==null )
return null;
}
可能是readLine()
的逻辑没有被正确使用。所以我怀疑你可能会以空行结束,因此返回一个null MovieData
对象。在分配之前,您应该检查下一行是否为空。