Java 为什么要继续说我的列表是空的?
我正在尝试创建一个Java程序来管理订票系统 我有一门电影课:Java 为什么要继续说我的列表是空的?,java,javafx,Java,Javafx,我正在尝试创建一个Java程序来管理订票系统 我有一门电影课: public class Film { private String title; private Double price; private String ageRestriction; private double rating; private String genre; private String location; private String screenDay; 一个FilmL
public class Film {
private String title;
private Double price;
private String ageRestriction;
private double rating;
private String genre;
private String location;
private String screenDay;
一个FilmList类,根据两个参数(位置和周)创建电影项目和排序的ArrayList
公共类电影列表{
公共电影列表(ArrayList filmArrayList){
this.filmArrayList=filmArrayList;
}
公众电影名单(){
this.filmArrayList=新的ArrayList();
}
公共ArrayList filmArrayList;
公共电影(电影){
this.filmArrayList.add(电影);
}
私人字符串显示位置;
私人电影周;
公共无效设置屏幕周(字符串屏幕日){
this.screenWeek=屏幕日;
}
公共字符串getScreenWeek(){
返回屏幕周;
}
公共位置(字符串位置){
this.showLocation=showLocation;
}
公共字符串getShowLocation(){
返回显示位置;
}
公共可选搜索影片(){
可选movieFounded=filmArrayList.stream().filter(i->i.getLocation().contains(getShowLocation())&&
i、 getScreenDay().contains(getScreenWeek()).findAny();
回归电影;
}
SetSwowLocation参数通过点击按钮进行设置(每个剧院有一个,setScreenWeek通过组合框进行设置)
图形单元与控制台的接口。请注意,如果我按下按钮而没有在组合框中选择任何内容,则会出现错误
主要用于测试。So
FilmList filmList = new FilmList();
filmList.addFilm
System.out.println(searchFilm().toString());
您的代码有点奇怪,但我想您的意思是将Film
实例传递给addFilm
,然后使用filmList.searchFilm()
反正
filter(
i -> i.getLocation().contains(getShowLocation()) &&
i.getScreenDay().contains(getScreenWeek())
)
在这里,您正在筛选filmArrayList
,其中包含一个单个元素
i.getLocation().contains(getShowLocation())
基本上意味着
i.getLocation().contains(null)
由于showLocation
字段未初始化。这同样适用于第二个条件,使用
screenWeek
我真的很惊讶它没有抛出NullPointerException
,就像
public boolean contains(CharSequence s) {
return indexOf(s.toString()) > -1; // NullPointerException at s.toString()
}
但是不管怎样,假设您初始化了这些字段,然后唯一的元素被过滤器
操作丢弃,这就是为什么您会看到Optional.empty
显然,您需要一个完整构造的
胶片
实例
final Film filmInstance = new Film();
filmInstance.title = "The NullPointerException adventure";
filmInstance.price = 12D;
filmInstance.ageRestriction = "+18";
filmInstance.rating = 18D;
filmInstance.genre = "Horror";
filmInstance.location = "US";
filmInstance.screenDay = "Monday";
filmList.addFilm(filmInstance);
问题出在
FilmList#setShowLocation
方法中。您正在将
showLocation
分配给自身,location
参数未使用
public void setShowLocation(String location) {
this.showLocation = showLocation;
}
这应该是
public void setShowLocation(String location) {
this.showLocation = location;
}
首先创建一个胶片对象,然后将该对象传递给filmList。addFilm(Film)能否请您添加您正在使用的确切输入。通过查看输出,您的胶片列表似乎是空的,或者您的输入有问题。评论不用于扩展讨论;此对话已结束。
public void setShowLocation(String location) {
this.showLocation = showLocation;
}
public void setShowLocation(String location) {
this.showLocation = location;
}