2012-03-29 133 views
0

我對這個項目有很多疑問,我正在處理中。這是一個電影虛擬數據庫。我有一個小的MovieEntry類(用於處理單個條目)和一個跟蹤所有10k +條目的大型MovieDatabase類。在我的第二個searchYear方法以及隨後的方法中,我得到錯誤「變量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',所以我們知道代碼的哪一部分要看? – 2012-03-29 19:27:31

+0

你將不得不比'變量g(或d或其他)'更具體一些。線條有幫助。具體的變量名稱幫助更多。 – 2012-03-29 19:30:08

回答

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

它告訴你的是,FileNotFoundException會處理一下IOException就會被抓,所以IOException異常變得不可作爲它永遠趕不上一個IO exceltion,爲什麼只是沒有趕上一個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>(); 
} 

此外,它是一個Java命名約定使用值較低的情況下,第一個字符(駱駝) :

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

哦,你需要在構造函數?:

public MovieDatabase(){ 
    ArrayList<MovieDatabase> Database = new ArrayList<MovieDatabase>(0); 
} 
重新初始化數據庫變量10

希望這有幫助。