有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对返回值感到困惑

我在做一个叫做MovieDatabase的项目。对于我的方法searchTitle、searchGene、searchDirector和searchYear,这些方法应该取一个子字符串,看看它们是否可以在数据库中的任何地方找到。我现在编译的东西,但当我测试BlueJ项目中的方法时,它们只返回null。我该怎么做才能让他们归还正确的东西?以下是我的全部代码(另外,还有一个单独的类叫做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) 个答案

  1. # 1 楼答案

    必须修改以下性质的方法

    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(),都要检查结果arraylist中的isEmpty(),以确保结果不是空的