我的一个项目遇到了问题。它是电影的虚拟数据库。我有两个类,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>();
}
}
答案 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>
,因此错误。