Java Arraylist-“找不到符号错误”

Java Arraylist-“找不到符号错误”,java,Java,嗨,我正在尝试制作一个电影数据库。已决定使用arraylist,因为我们无法使用数组。它将有4个类,电影,电影数据库,播放列表和界面。我希望将Movie类中的Movie对象添加到Moviedatabase中的Arraylist中,然后能够从接口中添加和删除它们。我收到很多错误,说它找不到变量。我使用了另一个类似的问题作为模板,不明白为什么它不能编译。 这是我的电影课 public class Movie { private String name, director; pri

嗨,我正在尝试制作一个电影数据库。已决定使用arraylist,因为我们无法使用数组。它将有4个类,电影,电影数据库,播放列表和界面。我希望将Movie类中的Movie对象添加到Moviedatabase中的Arraylist中,然后能够从接口中添加和删除它们。我收到很多错误,说它找不到变量。我使用了另一个类似的问题作为模板,不明白为什么它不能编译。 这是我的电影课

    public class Movie 
 {
  private String name, director;
  private int fileSize, duration;

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


  }   

  Movie(String newName, String newDirector, int newfileSize, int newDuration)
  {   
     this.name = newName;
     this.director = newDirector;
     this.fileSize = newfileSize;
     this.duration = newDuration;

  }   
  public void setName(String newName)
  {
      name = newName;
  }
  public void setDirector(String newDirector)
  {
      director = newDirector;
  }
  public void setfileSize(int newfileSize)
  {
      fileSize = newfileSize;
  }
  public void setDuration(int newDuration)
  {
      duration = newDuration;
  }
  public String getName()
  {
      return name;
  }
  public String getDirector()
  {
      return director;
  } 
  public int getfileSize()
  {
      return fileSize;
  }
  public int getDuration()
  {
      return duration;
  }




}
还有MovieDatabase类

 import java.util.*;

    public class MovieDatabase
      {   //start class
      private ArrayList<Movie> list = new ArrayList<Movie>(4);   //creates ArrayList
      Movie newMovie = new Movie(newName, newDirector, newfileSize, newDuration);   //instantiates Movie class

     public void add(Movie newMovie)   //method adds a new Movie object to the array list
  {   //start add
     list.add(newMovie);

  }   //end add  


    public void add(String newName, String newDirector, int newfileSize, int newDuration)   //accepts parameters from main method to add to new object
  {   //start add
     newName = name;
     newDirector = director;
     newfileSize = fileSize;
     newDuration = duration;

     newMovie.setName(newName);
     newMovie.setDirector(newDirector);
     newMovie.setfileSize(newfileSize);
     newMovie.setDuration(newDuration);

     list.add(newName,newDirector,newfileSize,newDuration);




  }   //end add
 } 

//end class
Movie newMovie=newmovienewname、newDirector、newfileSize、newDuration


您需要定义newName、newDirector、newfileSize和newDuration,因为这些变量当前不存在于MovieDatabase中。

您不需要将数组列表的长度指定为4。ArrayList的目的是使列表属性具有类似于数组的性能,如按名称或位置添加和删除项、大小检查等

此外,addMovie newMvoie方法将电影添加到类变量列表中,但您尝试在类内创建列表。实际上,您应该声明一个没有新构造函数的列表成员变量

public class MovieDataBase {
    private ArrayList<Movie> list;
}  

不能只在方法或构造函数之外的类中编写代码。您需要创建一个MovieDatabase构造函数,并且可能需要另一个类来驱动应用程序

以下代码使用的变量未在MovieDatabase类中声明

你的意思可能是:

public void add(String newName, String newDirector, int newfileSize, int newDuration)   //accepts parameters from main method to add to new object
  {   
     list.add(new Movie(newName,newDirector,newfileSize,newDuration));
  }    

编辑您的问题并添加一些错误消息。和gibt:更频繁地运行编译器。不要等到写了50行代码才运行@KenWhite的compilerPossible duplicate它是怎么一个副本的?因为它是几十个未定义引用/未解析外部符号错误帖子中的一个的副本,我们不可能为地球上的某个人构建的每一个项目都有一个,在不同的类中遇到相同的问题。在C中,如何添加整数变量a和b?当变量的名称不同时不会改变,所以在C中,如何添加整数变量C和d?这是一个复制品。在这种情况下也是如此。但是它不应该从电影类中获取变量吗?@Jack不,你已经将它们设置为私有的,而且它不像电影数据库那样扩展了电影类。我建议您学习初始化对象和设置它们的变量。
public void add(String newName, String newDirector, int newfileSize, int newDuration)   //accepts parameters from main method to add to new object
  {   //start add
     newName = name;
     newDirector = director;
     newfileSize = fileSize;
     newDuration = duration;
     newMovie.setName(newName);
     newMovie.setDirector(newDirector);
     newMovie.setfileSize(newfileSize);
     newMovie.setDuration(newDuration);
     list.add(newName,newDirector,newfileSize,newDuration);
  }    
public void add(String newName, String newDirector, int newfileSize, int newDuration)   //accepts parameters from main method to add to new object
  {   
     list.add(new Movie(newName,newDirector,newfileSize,newDuration));
  }