无法返回ArrayList

时间:2012-03-29 15:24:52

标签: java

我的一个项目遇到了问题。它是电影的虚拟数据库。我有两个类,MovieEntry(小的,用于单个条目)和MovieDatabase(大,以及下面的代码。)我收到一个错误,返回我的ArrayLists,如searchYear。它说不兼容的类型。为什么我不能返回一个ArrayList?

import java.util.ArrayList;
import java.util.Scanner;
import java.io.*;

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<MovieEntry> 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 year : Database);
          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>();
    }




}

10 个答案:

答案 0 :(得分:4)

您声明函数返回ArrayList<MovieEntry>,并且您返回的变量被声明为ArrayList<String>。你需要改变其中一个。

答案 1 :(得分:3)

当预计有ArrayList <String>时,您将返回ArrayList<MovieEntry> ps:即使您的代码编译,似乎也有很多错误。

答案 2 :(得分:2)

public ArrayList<MovieEntry> 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;
}

返回值应该是MovieEntry个对象的列表,而不是String个对象。

答案 3 :(得分:2)

public ArrayList<MovieEntry> searchYear (int yr){
   ArrayList <String> yearMatches = new ArrayList<String>();
   // ...
   return yearMatches;
}

您的方法签名表示您要返回ArrayList<MovieEntry>,但实际上您正在返回ArrayList<String>

答案 4 :(得分:1)

让我们详细看一下这段代码,就像一个例子:

public ArrayList<MovieEntry> 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 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;
}

所以,这提出了一些问题:

  • 您为什么要拨打m.getYear(yr)并完全忽略结果?
  • 您为什么询问ArrayList<String>是否包含int?怎么可能呢?
  • 为什么您希望能够ArrayList<String>作为ArrayList<MovieEntry>返回?您只是将年份的字符串值添加到yearMatches - 这不是MovieEntry

最后一部分是编译时错误的原因......但其余的代码都被破坏了。我怀疑你想要:

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

答案 5 :(得分:0)

ArrayList <String> yearMatches

应该是

ArrayList<MovieEntry> yearMatches因为您的方法签名是

ArrayList<MovieEntry> searchYear (int yr)

答案 6 :(得分:0)

您需要在searchYear

中更改yearMatches的返回类型

答案 7 :(得分:0)

该方法指定您将返回一个ArrayList,但是您尝试返回一个ArrayList。

将ArrayList更改为ArrayList,它应该可以工作。否则,您必须构建要放入列表中的MovieEntry对象。

希望它有所帮助。

答案 8 :(得分:0)

ArrayList<MovieEntry>ArrayList <String>不兼容。只是不要输入回报(但我不认为是正确的)

答案 9 :(得分:0)

我将猜测错误是在searchYear方法中。您的返回类型为ArrayList<MovieEntry>,但是,您返回ArrayList<String>,因此错误。