Не удается найти символ - метод Добавить - PullRequest
1 голос
/ 29 марта 2012

Я работаю над проектом, который создает виртуальную базу данных для фильмов.У меня есть два класса: 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 m), который вызывает другой класс.

РЕДАКТИРОВАТЬ: Я все еще получаю ошибку в моем методе searchTitle, который говорит, что база данных имеет несовместимый тип.Может кто-нибудь объяснить проблему с моим циклом for-each?Я следовал за книгой как мог.Пока спасибо за вашу помощь!

Ответы [ 5 ]

0 голосов
/ 29 марта 2012

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

Переменная базы данных должна быть закрытой и не создавать новую переменную в конструкторе.

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;
    }
}
0 голосов
/ 29 марта 2012

Это

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

должно быть

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

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

0 голосов
/ 29 марта 2012

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

0 голосов
/ 29 марта 2012
for (String s : Database)
   s.getYear();

s является объектом String, а в классе String нет метода, подобного getYear ().Так что метод не найден ошибка

0 голосов
/ 29 марта 2012

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

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

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

public class MovieDatabase
{
   public ArrayList<MovieDatabase> database = new ArrayList<MovieDatabase>();

   public MovieDatabase(){
   }

   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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...