对象中的Java空指针异常错误

对象中的Java空指针异常错误,java,object,methods,error-handling,nullpointerexception,Java,Object,Methods,Error Handling,Nullpointerexception,我编写了一个带有对象的程序,当我试图运行它时,我得到了一个NullPointerException错误,但我无法发现代码中的确切问题。这里是(粗体线是eclipse在错误时指向的位置): 公共影院{ 私有字符串名称; 私有字符串地址; 私人房间[]; 私人电影[]; 私人最终整数MAX_NUM_MOVIES=20; 私人最终室内最大数量=5间; 私人电影计数器; 私人室内柜台; 公共影院(字符串影院名称、字符串地址){ this.cinemaName=cinemaName; 这个地址=地址; 房

我编写了一个带有对象的程序,当我试图运行它时,我得到了一个NullPointerException错误,但我无法发现代码中的确切问题。这里是(粗体线是eclipse在错误时指向的位置):

公共影院{
私有字符串名称;
私有字符串地址;
私人房间[];
私人电影[];
私人最终整数MAX_NUM_MOVIES=20;
私人最终室内最大数量=5间;
私人电影计数器;
私人室内柜台;
公共影院(字符串影院名称、字符串地址){
this.cinemaName=cinemaName;
这个地址=地址;
房间[]=新房间[最大房间数];
@抑制警告(“未使用”)
电影[]=新电影[MAX_NUM_Movies];
movieCounter=0;
房间计数器=0;
}
公共布尔addMovieToCinema(电影theMovie){
if(theMovie==null){
返回false;
}
if(movieCounter

有什么想法吗?

而不是分配给这两个成员变量:

private Room Rooms[];
private Movie Movies[];
使用以下两行声明新的局部变量:

Room Rooms[] = new Room[MAX_NUM_ROOMS];
Movie Movies[] = new Movie[MAX_NUM_MOVIES];
将它们修复为此,以初始化您的
房间
电影
类成员:

Rooms = new Room[MAX_NUM_ROOMS];
Movies = new Movie[MAX_NUM_MOVIES];

而不是分配给这两个成员变量:

private Room Rooms[];
private Movie Movies[];
使用以下两行声明新的局部变量:

Room Rooms[] = new Room[MAX_NUM_ROOMS];
Movie Movies[] = new Movie[MAX_NUM_MOVIES];
将它们修复为此,以初始化您的
房间
电影
类成员:

Rooms = new Room[MAX_NUM_ROOMS];
Movies = new Movie[MAX_NUM_MOVIES];

而不是分配给这两个成员变量:

private Room Rooms[];
private Movie Movies[];
使用以下两行声明新的局部变量:

Room Rooms[] = new Room[MAX_NUM_ROOMS];
Movie Movies[] = new Movie[MAX_NUM_MOVIES];
将它们修复为此,以初始化您的
房间
电影
类成员:

Rooms = new Room[MAX_NUM_ROOMS];
Movies = new Movie[MAX_NUM_MOVIES];

而不是分配给这两个成员变量:

private Room Rooms[];
private Movie Movies[];
使用以下两行声明新的局部变量:

Room Rooms[] = new Room[MAX_NUM_ROOMS];
Movie Movies[] = new Movie[MAX_NUM_MOVIES];
将它们修复为此,以初始化您的
房间
电影
类成员:

Rooms = new Room[MAX_NUM_ROOMS];
Movies = new Movie[MAX_NUM_MOVIES];

这两个数组应该是类字段

private int movieCounter;
private int roomCounter;
private Room[] Rooms = new Room[MAX_NUM_ROOMS];
private Movie[] Movies = new Movie[MAX_NUM_MOVIES];

public Cinema(String cinemaName, String Address) {
  this.cinemaName = cinemaName;
  this.Address = Address;
  movieCounter = 0;
  roomCounter = 0;
}
为什么不使用列表存储电影(和房间)?您不必提供硬编码的限制

List<Movie> movies = new ArrayList<>();

public boolean addMovieToCinema(Movie theMovie) {
    if (theMovie == null) {
        return false;
    }
    movies.add( theMovie );
    return true;
}
List movies=new ArrayList();
公共布尔addMovieToCinema(电影theMovie){
if(theMovie==null){
返回false;
}
添加(theMovie);
返回true;
}

一切都变得简单了。

这两个数组应该是类字段

private int movieCounter;
private int roomCounter;
private Room[] Rooms = new Room[MAX_NUM_ROOMS];
private Movie[] Movies = new Movie[MAX_NUM_MOVIES];

public Cinema(String cinemaName, String Address) {
  this.cinemaName = cinemaName;
  this.Address = Address;
  movieCounter = 0;
  roomCounter = 0;
}
为什么不使用列表存储电影(和房间)?您不必提供硬编码的限制

List<Movie> movies = new ArrayList<>();

public boolean addMovieToCinema(Movie theMovie) {
    if (theMovie == null) {
        return false;
    }
    movies.add( theMovie );
    return true;
}
List movies=new ArrayList();
公共布尔addMovieToCinema(电影theMovie){
if(theMovie==null){
返回false;
}
添加(theMovie);
返回true;
}

一切都变得简单了。

这两个数组应该是类字段

private int movieCounter;
private int roomCounter;
private Room[] Rooms = new Room[MAX_NUM_ROOMS];
private Movie[] Movies = new Movie[MAX_NUM_MOVIES];

public Cinema(String cinemaName, String Address) {
  this.cinemaName = cinemaName;
  this.Address = Address;
  movieCounter = 0;
  roomCounter = 0;
}
为什么不使用列表存储电影(和房间)?您不必提供硬编码的限制

List<Movie> movies = new ArrayList<>();

public boolean addMovieToCinema(Movie theMovie) {
    if (theMovie == null) {
        return false;
    }
    movies.add( theMovie );
    return true;
}
List movies=new ArrayList();
公共布尔addMovieToCinema(电影theMovie){
if(theMovie==null){
返回false;
}
添加(theMovie);
返回true;
}

一切都变得简单了。

这两个数组应该是类字段

private int movieCounter;
private int roomCounter;
private Room[] Rooms = new Room[MAX_NUM_ROOMS];
private Movie[] Movies = new Movie[MAX_NUM_MOVIES];

public Cinema(String cinemaName, String Address) {
  this.cinemaName = cinemaName;
  this.Address = Address;
  movieCounter = 0;
  roomCounter = 0;
}
为什么不使用列表存储电影(和房间)?您不必提供硬编码的限制

List<Movie> movies = new ArrayList<>();

public boolean addMovieToCinema(Movie theMovie) {
    if (theMovie == null) {
        return false;
    }
    movies.add( theMovie );
    return true;
}
List movies=new ArrayList();
公共布尔addMovieToCinema(电影theMovie){
if(theMovie==null){
返回false;
}
添加(theMovie);
返回true;
}

一切都变得简单了。

问题是构造函数隐藏了类成员

如果您声明
私人电影[]然后在构造器中编写:
Movies=newmovie[MAX_NUM_Movies]


当你写到:
moviemovies[]=新电影[MAX_NUM_Movies]
然后您实际上声明了一个新变量,它是构造函数的本地变量,这就是为什么类成员
Movies
为空,因为初始化的不是它。

问题是构造函数隐藏了类成员

如果您声明
私人电影[]然后在构造器中编写:
Movies=newmovie[MAX_NUM_Movies]


当你写到:
moviemovies[]=新电影[MAX_NUM_Movies]
然后您实际上声明了一个新变量,它是构造函数的本地变量,这就是为什么类成员
Movies
为空,因为初始化的不是它。

问题是构造函数隐藏了类成员

如果您声明
私人电影[]然后在构造器中编写:
Movies=newmovie[MAX_NUM_Movies]


当你写到:
moviemovies[]=新电影[MAX_NUM_Movies]
然后您实际上声明了一个新变量,它是构造函数的本地变量,这就是为什么类成员
Movies
为空,因为初始化的不是它。

问题是构造函数隐藏了类成员

如果您声明
私人电影[]然后在构造器中编写:
Movies=newmovie[MAX_NUM_Movies]


当你写到:
moviemovies[]=新电影[MAX_NUM_Movies]
然后您实际上声明了一个新变量,它是构造函数的本地变量,这就是为什么类成员
Movies
为空,因为初始化的不是它。

而不是定义它:

private Room Rooms[];
private Movie Movies[];
为什么只定义一个集合!?比如:

private Collection<Room> rooms;
private Collection<Movie> movies;
私人收藏室;
私人收藏电影;
然后,在构造函数中,您必须初始化集合:

this.rooms = new ArrayList<>();
this.movies = new ArrayList<>();
this.rooms=new ArrayList();
this.movies=new ArrayList();

我想说这是Java的方式。还请记住,属性名称应为小写。

而不是定义:<