2012-03-29 4 views
0

У меня есть много вопросов об этом проекте, над которым я работаю. Это виртуальная база для фильмов. У меня есть небольшой класс MovieEntry (для обработки отдельных записей) и большой класс MovieDatabase, который отслеживает все записи 10k +. В моем втором методе поиска, а также в последующих методах я получаю ошибку «переменная g (или d или что-то еще), возможно, не была инициализирована». Я также получаю всплывающее сообщение об ошибке Warnings from last compilation: unreachable catch clause. thrown type java.io.FileNotFoundException has already been caught. Я уверен, что на обоих. Вот код:Возможно, переменная g не была инициализирована

public class MovieDatabase 
{ 
    private ArrayList<MovieEntry> Database = new ArrayList<MovieEntry>(); 
    public MovieDatabase(){ 
     ArrayList<MovieDatabase> Database = new ArrayList<MovieDatabase>(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 (MovieEntry title : Database) 
      System.out.println(title); 
      return null; 
    } 

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

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

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

    public ArrayList<MovieEntry> searchYear(int from, int to){ 
     ArrayList <String> Matches = new ArrayList<String>(); 
     for(MovieEntry m : Database); 
      m.getYear(); 
      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(){ 
    ArrayList <String> gList = new ArrayList<String>(); 
    for(MovieEntry m : Database){ 
     String g = m.getGenre(g); 
     if(gList.contains(g) == false){ 
     gList.add(g); 
     } 
     return gList.size(); 
    } 
    } 

    public int countDirectors(){ 
    ArrayList <String> dList = new ArrayList<String>(); 
    for(MovieEntry m : Database){ 
     String d = m.getDirector(d); 
     if(dList.contains(d) == false){ 
      dList.add(d); 
     } 
     return dList.size(); 
    } 

    } 

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




} 
+0

Не могли бы вы рассказать нам, есть ли его 'g' или' d', поэтому мы знаем, на какую часть кода посмотреть? –

+0

Вы должны быть немного более конкретными, чем «переменная g (или d или что-то еще)». Линии помогают. Определенные имена переменных помогают. –

ответ

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

Сво говорит вам, что FileNotFoundException будет иметь дело с тем, что ловя IOException, поэтому IOException становится недоступным, как в нем никогда не поймать exceltion IO, почему просто не поймать Exception вместо

Что касается инициализации

public int countDirectors(){ 
    ArrayList <String> dList = new ArrayList<String>(); 
    for(MovieEntry m : Database){ 
     String d = m.getDirector(d); //THIS LINE 
     if(dList.contains(d) == false){ 
      dList.add(d); 
     } 
     return dList.size(); 
    } 

линия String d = m.getDirector(d); может быть проблема, d обыкновения быть инициализирован, если есть что-то в MovieEntry и, насколько я могу видеть, что никогда не будет ничего, потому что вы инициализации его к пустому списку массива

ArrayList<MovieDatabase> Database = new ArrayList<MovieDatabase>(0);

Может быть, вы должны быть пропусканием массива фильмы в конструктор, а затем добавить эти фильмы в переменную Database?

0

Похоже, что с этим кодом возникает ряд проблем.

Какой параметр MovieEntry.getGenre() ожидает? Вы не можете использовать g в этом случае, потому что он еще не определен.

Вы упомянули, что исключение уже было поймано или, возможно, никогда не было брошено. Я считаю, что в этом случае IOException никогда не выбрасывается из кода внутри блока try.

Есть целый ряд методов, которые должны возвращать значение, но не, например:

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

Кроме того, это ява именование использовать строчные первые символы (верблюд случай) для значений :

private ArrayList<MovieEntry> database = new ArrayList<MovieEntry>(); 

о, и вам нужно повторно инициализировать переменную базы данных в конструкторе ?:

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

Надеюсь, что это поможет.

Смежные вопросы