Java 无法返回ArrayList
我的一个项目有问题。这是一个电影的虚拟数据库。我有两个类,MovieEntry small,用于个人条目和MovieDatabase large,以及下面的代码。返回ArrayList时出错,例如在searchYear中。它说不兼容的类型。为什么我不能返回ArrayListJava 无法返回ArrayList,java,Java,我的一个项目有问题。这是一个电影的虚拟数据库。我有两个类,MovieEntry small,用于个人条目和MovieDatabase large,以及下面的代码。返回ArrayList时出错,例如在searchYear中。它说不兼容的类型。为什么我不能返回ArrayList import java.util.ArrayList; import java.util.Scanner; import java.io.*; public class MovieDatabase { private
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>();
}
}
当需要ArrayList时,您正在返回ArrayList。
ps:即使你的代码编译了,似乎也有很多错误
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对象的列表,而不是字符串对象
应该是
ArrayList Years匹配,因为您的方法签名是
ArrayList<MovieEntry> searchYear (int yr)
您将函数声明为返回ArrayList,并且将返回的变量声明为ArrayList。你需要改变其中一个
public ArrayList<MovieEntry> searchYear (int yr){
ArrayList <String> yearMatches = new ArrayList<String>();
// ...
return yearMatches;
}
您的方法签名表示您正在返回ArrayList,但实际上您正在返回ArrayList。您需要更改searchYear中yearMatches的返回类型。该方法指定您将返回ArrayList,但您尝试返回ArrayList 将ArrayList更改为ArrayList,它应该可以工作。否则,您必须构造MovieEntry对象才能放入列表中
希望有帮助。ArrayList与ArrayList不兼容。只是不要键入报税表,但我认为这是不正确的我想猜测一下,错误在您的searchYear方法中。返回类型为ArrayList,但返回的是ArrayList,因此会出现错误。让我们详细看看这段代码,就像一个示例:
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;
}
确切的错误是什么?请正确缩进您的代码-这在目前是非常误导的。就我个人而言,我还建议对块始终使用开/闭大括号,但那是另一回事;。非常puzzling@UmNyobe:那是另一种方法。我只是在看这个具体的方法。
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;
}
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;
}