2012-03-29 2 views
1

Я работаю над проектом, который создает виртуальную базу данных для фильмов. У меня есть два класса: MovieEntry (для отдельной записи фильма) и MovieDatabase (более крупный класс, содержащий базу данных и позволяющий добавлять и т. Д.) Ошибка, которую я получаю, это «Не удается найти символ - метод Добавить», но У меня есть 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>(); 

    } 

}** 

У меня есть сообщение об ошибке говорящее метод getYear() не может быть найден, даже если это в другом классе, это не статично, и я создаю объект (MovieEntry м), вызывающие другой класс.

EDIT: Я по-прежнему получаю сообщение об ошибке в методе searchTitle, который говорит, что база данных имеет несовместимый тип. Может ли кто-нибудь объяснить проблему с моим циклом for-each? Я следовал за книгой, насколько мог. Спасибо за вашу помощь до сих пор!

+0

Пожалуйста, включите стек. – mre

+0

опубликуйте свои сообщения – blejzz

ответ

0

Ваш конструктор определяет локальную переменную Database, которая скрывает переменную класса. Правильно:

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

Основная проблема заключается в том, что, когда вы звоните Database.add(m); вы добавляете MovieEntry экземпляр к ArrayList<String>, который поддерживает только добавление строк.

+0

Спасибо, jabal, этот ответ очень помог. Однако следующая ошибка, которую я получаю, включает метод searchTitle. Он выделяет «базу данных» и говорит «несовместимые типы». Разве это не где ArrayList? Я очень много нового для каждого цикла, и в книге мало сказано. –

+0

В 'searchTitle' вы делаете ту же ошибку: вы пытаетесь перебрать список' MovieEntries' с помощью String. Правильно: for (MovieEntry me: Database) {System.out.println (me.getTitle()); } – jabal

+0

Java предлагает именовать переменные с именами, начинающимися с строчных букв, чтобы отличать их от классов, имя которых начинается с буквы верхнего регистра. – jabal

0

В поисковом методе Matches.add() должен быть, вероятно, Matches.add (s);

0
for (String s : Database) 
    s.getYear(); 

s является объектом String, а в классе String нет метода getYear(). Поэтому метод не найден ошибка

+0

@MichaelMoore в первую очередь изменить свои первые четыре строки кода на публичный ArrayList База данных; public MovieDatabase() { это. База данных = новый ArrayList (0); }, а затем ответьте мне с ошибкой. –

0

Этого

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

должен быть

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

Функция getYear не работает, потому что у вас есть ArrayList со строковыми объектами и строки не имеет функцию getYear. Вы должны создать новый класс, который расширяет String и помещает его в общий атрибут arraylist.

0

Основные проблемы:

переменных базы данных должны быть частными, И не создавать новые переменный в конструкторе.

private ArrayList<String> Database; 

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

Ваши методы поиска возвращают список, но не имеют оператора возврата. Вернуть null или инициализировать пустой arraylist и вернуть его. Например:

public ArrayList<MovieEntry> searchTitle(String substring){ 
     ArrayList<MovieEntry> entries = new ArrayList<MovieEntry>(); 
     for (String title : Database) 
      System.out.println(title); 
     return entries; 
    } 
} 
Смежные вопросы