2012-03-30 25 views
0

私はMovieDatabaseというプロジェクトに取り組んでいます。私のsearchTitle、searchGenre、searchDirector、およびsearchYearのメソッドの場合、メソッドは部分文字列を取り、それらがデータベースのどこにあっても見つかるはずです。私が今コンパイルしているのはBlueJプロジェクトのメソッドをテストするときにnullだけを返します。正しいものを返すために私は何を変えますか?ここに私のコードは、その全体である(P.S. getメソッドを処理MovieEntryと呼ばれる別のクラスがあります):戻り値

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<String> searchTitle(String substring){ 
     for (MovieEntry m : Database) 
      if(m.getTitle().contains(substring)){ 
      System.out.println(m.getTitle()); 
     } 
     return null; 
    } 

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

    public ArrayList<String> searchDirector (String substring){ 
     for (MovieEntry m : Database) 
     if(m.getDirector().contains(substring)){ 
      System.out.println(m.getDirector()); 
     } 
     return null; 

    } 

    public ArrayList<MovieEntry> searchYear(int year){ 
    ArrayList<MovieEntry> yearMatches = new ArrayList<MovieEntry>(); 
     for (MovieEntry m : Database) { 
     if (m.getYear() == year) { 
      yearMatches.add(m); 
     } 
    } 
    return yearMatches; 
    } 

    public ArrayList<MovieEntry> searchYear(int from, int to){ 
     ArrayList <MovieEntry> Matches = new ArrayList<MovieEntry>(); 
     for(MovieEntry m : Database){ 
      if(m.getYear() >= from && m.getYear() <= to){ 
      Matches.add(m); 
     } 
     } 
    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(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(); 
     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(); 
     if(dList.contains(d) == false){ 
      dList.add(d); 
     } 

    } 
      return dList.size(); 
    } 

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




} 
+0

私はそれを試みましたが、 "記号 - 変数mを見つけることができません"とかそういうものがあります。私は、mがfor-eachループ内にあり、到達不能であるためだと思います。 –

+0

あなたはファイルを読んでいます...しかし、私はあなたのarraylistsに何かがあるかどうかをチェックしたことがある情報からどこにでも情報を入れていることはありませんか? –

答えて

2

次の自然

public ArrayList<String> search*(String substring){

の方法を変更する必要がありSystem.out.printlnを削除します。その代わりに、文字列の新しい配列リストにマッチを追加します。

public ArrayList<String> searchTitle(String substring){ 
     ArrayList<String> matches = new ArrayList<String>(); 
     for (MovieEntry m : Database) 
      if(m.getTitle().contains(substring)){ 
      matches.add(m.getTitle()); 
     } 
     return matches; 
    } 

あなたは結果が空でないことを確認するためのisEmpty()searchTitle()、チェック結果のArrayListを呼び出しているところはどこでも。