Java Can';找不到符号-方法添加

Java Can';找不到符号-方法添加,java,database-design,Java,Database Design,我正在做一个为电影创建虚拟数据库的项目。我有两个类:MovieEntry(用于单个电影条目)和MovieDatabase(包含数据库并允许添加的较大类,等等) 我得到的错误是“找不到Symbol-methodadd”,但我在顶部声明了一个ArrayList。这是我的全部代码,我知道还有其他错误 **public class MovieDatabase { public ArrayList<String> Database = new ArrayList<String>

我正在做一个为电影创建虚拟数据库的项目。我有两个类:MovieEntry(用于单个电影条目)和MovieDatabase(包含数据库并允许添加的较大类,等等) 我得到的错误是“找不到Symbol-methodadd”,但我在顶部声明了一个ArrayList。这是我的全部代码,我知道还有其他错误

**public class MovieDatabase
{
   public ArrayList<String> Database = new ArrayList<String>();

   public MovieDatabase(){
       ArrayList<String> Database = new ArrayList<String>(0);
    }

   public int countTitles() throws IOException{
       Scanner fileScan;
       fileScan = new Scanner (new File("movies.txt"));
       int count = 0;
       String movieCount;
       while(fileScan.hasNext()){
           movieCount = fileScan.nextLine();
           count++;
        }
       return count;
    }

   public void addMovie(MovieEntry m){
       Database.add(m);
    }

   public ArrayList<MovieEntry> searchTitle(String substring){
       for (String title : Database)
          System.out.println(title);
    }

   public ArrayList<MovieEntry> searchGenre(String substring){
       for (String genre : Database)
          System.out.println(genre);
    }

   public ArrayList<MovieEntry> searchDirector (String str){
       for (String director : Database)
          System.out.println(director);
    }

   public ArrayList<MovieEntry> searchYear (int yr){
       ArrayList <String> yearMatches = new ArrayList<String>();
       for (String s : Database)
       s.getYear();
        if(yearMatches.contains(y) == false){
           yearMatches.add(y);
        }
       return yearMatches;
    }

   public ArrayList<MovieEntry> searchYear(int from, int to){
       ArrayList <String> Matches = new ArrayList<String>();
       for(Student s : movies);
          Matches.add();
       return Matches;
    }

   public void readMovieData(String movies){
       String info;
       try{
           Scanner fileReader = new Scanner(new File(movies));
           Scanner lineReader;

           while(fileReader.hasNext()){
               info = fileReader.nextLine();

               lineReader = new Scanner(info);
               lineReader.useDelimiter(":");

               String title = lineReader.next();
               String director = lineReader.next();
               String genre = lineReader.next();
               int year = lineReader.nextInt();
            }

        }catch(FileNotFoundException error){
            System.out.println("File not found.");

        }catch(IOException error){
            System.out.println("Oops! Something went wrong.");
        }
    }

   public int countGenres(){
    String g;
    ArrayList <String> gList = new ArrayList<String>();
    for(Student s : movies){
      String g = s.getGenre();
      if(gList.contains(g) == false){
        gList.add(g);
      }
      return gList.size();
    }
    }
    public int countDirectors(){
     ArrayList <String> dList = new ArrayList<String>();
     for(Student s : movies){
        String d = s.getDirector();
        if(dList.contains(d) == false){
            dList.add(d);
        }
        return dList.size();
     }

     }

    public String listGenres(){
        ArrayList <String> genreList = new ArrayList<String>();

    }

}**
**公共级电影数据库
{
公共ArrayList数据库=新建ArrayList();
公共电影数据库(){
ArrayList数据库=新的ArrayList(0);
}
public int countTitles()引发IOException{
扫描仪文件扫描;
fileScan=新扫描仪(新文件(“movies.txt”);
整数计数=0;
弦动计数;
while(fileScan.hasNext()){
movieCount=fileScan.nextLine();
计数++;
}
返回计数;
}
公共电影(电影条目m){
数据库。添加(m);
}
公共ArrayList searchTitle(字符串子字符串){
for(字符串标题:数据库)
系统输出打印项次(标题);
}
公共ArrayList搜索类型(字符串子字符串){
for(字符串类型:数据库)
System.out.println(体裁);
}
公共ArrayList searchDirector(字符串str){
for(字符串控制器:数据库)
系统输出打印(主任);
}
公共阵列列表搜索年(国际年){
ArrayList yearMatches=新的ArrayList();
for(字符串s:数据库)
s、 getYear();
if(yearMatches.contains(y)=false){
年份匹配。添加(y);
}
复赛;
}
公共ArrayList searchYear(int-from,int-to){
ArrayList Matches=新的ArrayList();
(学生:电影);
匹配。添加();
返回比赛;
}
public void readMovieData(字符串电影){
字符串信息;
试一试{
Scanner fileReader=新扫描仪(新文件(电影));
扫描器;
while(fileReader.hasNext()){
info=fileReader.nextLine();
lineReader=新扫描仪(信息);
lineReader.useDelimiter(“:”);
String title=lineReader.next();
String director=lineReader.next();
字符串类型=lineReader.next();
int year=lineReader.nextInt();
}
}捕获(FileNotFoundException错误){
System.out.println(“未找到文件”);
}捕获(IOException错误){
System.out.println(“哎呀!出了点问题。”);
}
}
公共int COUNTRES(){
字符串g;
ArrayList gList=新的ArrayList();
(学生:电影){
字符串g=s.getgreen();
if(gList.contains(g)=false){
添加(g);
}
返回gList.size();
}
}
公众谘询委员会(){
ArrayList dList=新的ArrayList();
(学生:电影){
字符串d=s.getDirector();
if(数据列表包含(d)=false){
d.增加(d);
}
返回dList.size();
}
}
公共字符串listGenes(){
ArrayList genreList=新的ArrayList();
}
}**
我还有一个错误,即无法找到方法getYear(),即使它在另一个类中,它不是静态的,并且我正在创建一个调用另一个类的对象(MovieEntry m)


编辑:我的searchTitle方法中仍然出现一个错误,说数据库是不兼容的类型。有人能解释一下我的for each循环的问题吗?我尽可能地照着书读。谢谢你迄今为止的帮助

构造函数定义了一个隐藏类变量的局部变量
数据库
。正确地说:

public MovieDatabase(){
    Database = new ArrayList<String>(0);
}

在searchYear方法中,Matches.add()可能应该是Matches.add(s)

s是一个String对象,在String类中没有像getYear()这样的方法。因此方法未找到错误

 public MovieDatabase(){
    ArrayList<String> Database = new ArrayList<String>(0);
 }
公共电影数据库(){
ArrayList数据库=新的ArrayList(0);
}
应该是

 public MovieDatabase(){
   this.Database = new ArrayList<String>(0);
 }
公共电影数据库(){
this.Database=newarraylist(0);
}
getYear函数不起作用,因为您有带字符串对象的arraylist,而字符串对象没有getYear函数。您必须创建一个新类来扩展字符串并将其放入arraylist泛型中。

主要问题:

数据库变量应该是私有的,并且不要在构造函数中创建新变量

private ArrayList<String> Database;

public MovieDatabase(){
       this.Database = new ArrayList<String>();
    }
私有ArrayList数据库;
公共电影数据库(){
this.Database=new ArrayList();
}
您的搜索方法返回列表,但没有return语句。返回null,或init empty arraylist返回它。例如:

   public ArrayList<MovieEntry> searchTitle(String substring){
       ArrayList<MovieEntry> entries = new ArrayList<MovieEntry>();
       for (String title : Database)
          System.out.println(title);
       return entries;
    }
}
public ArrayList searchTitle(字符串子字符串){
ArrayList条目=新的ArrayList();
for(字符串标题:数据库)
系统输出打印项次(标题);
返回条目;
}
}

请包括stacktrace。谢谢你,贾巴尔,这个答案非常有用。然而,我得到的下一个错误涉及searchTitle方法。它突出显示“数据库”并显示“不兼容类型”。这不是ArrayList所在的位置吗?我对for each循环非常陌生,这本书几乎没有提及。在
searchTitle
中,你犯了同样的错误:你试图用字符串迭代
MovieEntries
列表。正确:对于(MovieEntry me:Database){System.out.println(me.getTitle());}Java建议使用以小写字母开头的名称命名变量,以区别于名称以大写字母开头的类。@MichaelMoore首先将前四行代码更改为公共ArrayList数据库;public MovieDatabase(){this.Database=new ArrayList(0);},然后用错误回复我。
private ArrayList<String> Database;

public MovieDatabase(){
       this.Database = new ArrayList<String>();
    }
   public ArrayList<MovieEntry> searchTitle(String substring){
       ArrayList<MovieEntry> entries = new ArrayList<MovieEntry>();
       for (String title : Database)
          System.out.println(title);
       return entries;
    }
}