2012-03-30 4 views
0

나는 MovieDatabase라는 프로젝트에서 일하고 있습니다. searchTitle, searchGenre, searchDirector 및 searchYear 메서드의 경우 메서드는 하위 문자열을 가져 와서 데이터베이스의 어느 위치에서나 찾을 수 있는지 확인합니다. 지금 내가 컴파일 한 것은 BlueJ 프로젝트의 메서드를 테스트 할 때 null 만 반환합니다. 그들이 옳은 것을 돌려 주도록 바꾸려면 어떻게해야합니까? 여기에 내 코드 (추신 get 메소드를 처리하는 별도의 클래스라고 MovieEntry있다) 전체에 : 당신은 System.out.println를 제거 다음과 같은 성격의 방법에 대한 혼란 반환 값

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

을 수정해야합니다

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

나는 그것을 시도했다. 그러나 그것은 "symbol - variable m"을 찾거나 찾을 수 없다고 말한다. m은 for-each 루프 내에 있으므로 도달 할 수 없기 때문입니다. –

+0

당신은 파일을 읽고 있습니다 ...하지만 당신은 내가 말할 수있는 것에서 정보를 가져 오지 않을 것입니다, 당신의 arraylists에 무엇이 있는지 확인 했습니까? –

답변

2

. 대신 문자열의 새 배열 목록에 일치를 추가하십시오.

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()에 대한 ArrayList에을의 결과로, searchTitle()를 호출 어디든지.