запутался в возвращаемом значении - PullRequest
0 голосов
/ 30 марта 2012

Я работаю над проектом под названием MovieDatabase. Для моих методов searchTitle, searchGenre, searchDirector и searchYear методы должны взять подстроку и посмотреть, можно ли их найти где-либо в базе данных. То, что у меня есть сейчас, компилируется, но когда я тестирую методы из проекта BlueJ, они возвращают только ноль. Что я могу изменить, чтобы заставить их вернуть нужные вещи? Вот мой код полностью (P.S. есть отдельный класс, называемый MovieEntry, который обрабатывает методы get):

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;
//     }




}

1 Ответ

2 голосов
/ 30 марта 2012

Вы должны изменить методы следующего характера

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;
    }

Везде, где вы вызываете searchTitle(), проверьте итоговый массив списков для isEmpty(), чтобы убедиться, что результат не пустой.

...