Java 对于每个循环不兼容的类型

Java 对于每个循环不兼容的类型,java,database-design,foreach,incompatibletypeerror,Java,Database Design,Foreach,Incompatibletypeerror,我正在做一个为电影创建虚拟数据库的项目。我有两个类:MovieEntry(用于单个电影条目)和MovieDatabase(包含数据库并允许添加的较大类),我得到了一些错误,第一个错误是在searchTitle方法中,它说数据库是不兼容的类型。有人能告诉我每个循环怎么做吗?我读了这本书,我认为ArrayList应该去那里,但显然不是 **import java.util.ArrayList; import java.util.Scanner; import java.io.*; public cl

我正在做一个为电影创建虚拟数据库的项目。我有两个类:MovieEntry(用于单个电影条目)和MovieDatabase(包含数据库并允许添加的较大类),我得到了一些错误,第一个错误是在searchTitle方法中,它说数据库是不兼容的类型。有人能告诉我每个循环怎么做吗?我读了这本书,我认为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 (String title : Database)
          System.out.println(title);
          return null;
    }

   public ArrayList<MovieEntry> searchGenre(String substring){
       for (String genre : Database)
          System.out.println(genre);
          return null;
    }

   public ArrayList<MovieEntry> searchDirector (String str){
       for (String director : Database)
          System.out.println(director);
          return null;
    }

   public ArrayList<MovieEntry> searchYear (int yr){
       ArrayList <String> yearMatches = new ArrayList<String>();
       for (String s : Database)
       s.getYear();
        if(yearMatches.contains(y) == false){
           yearMatches.add(y);
        }
       return yearMatches;
    }

   public ArrayList<MovieEntry> searchYear(int from, int to){
       ArrayList <String> Matches = new ArrayList<String>();
       for(Student s : movies);
          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(){
    String g;
    ArrayList <String> gList = new ArrayList<String>();
    for(Student s : movies){
      String g = s.getGenre();
      if(gList.contains(g) == false){
        gList.add(g);
      }
      return gList.size();
    }
    }
    public int countDirectors(){
     ArrayList <String> dList = new ArrayList<String>();
     for(Student s : movies){
        String d = s.getDirector();
        if(dList.contains(d) == false){
            dList.add(d);
        }
        return dList.size();
     }

     }

    public String listGenres(){
        ArrayList <String> genreList = new ArrayList<String>();

    }

}**
**导入java.util.ArrayList;
导入java.util.Scanner;
导入java.io.*;
公共类电影数据库
{
私有ArrayList数据库=新建ArrayList();
公共电影数据库(){
ArrayList数据库=新的ArrayList(0);
}
public int countTitles()引发IOException{
扫描仪文件扫描;
fileScan=新扫描仪(新文件(“movies.txt”);
整数计数=0;
弦动计数;
while(fileScan.hasNext()){
movieCount=fileScan.nextLine();
计数++;
}
返回计数;
}
公共电影(电影条目m){
数据库。添加(m);
}
公共ArrayList searchTitle(字符串子字符串){
for(字符串标题:数据库)
系统输出打印项次(标题);
返回null;
}
公共ArrayList搜索类型(字符串子字符串){
for(字符串类型:数据库)
System.out.println(体裁);
返回null;
}
公共ArrayList searchDirector(字符串str){
for(字符串控制器:数据库)
系统输出打印(主任);
返回null;
}
公共阵列列表搜索年(国际年){
ArrayList yearMatches=新的ArrayList();
for(字符串s:数据库)
s、 getYear();
if(yearMatches.contains(y)=false){
年份匹配。添加(y);
}
复赛;
}
公共ArrayList searchYear(int-from,int-to){
ArrayList Matches=新的ArrayList();
(学生:电影);
匹配。添加();
返回比赛;
}
public void readMovieData(字符串电影){
字符串信息;
试一试{
Scanner fileReader=新扫描仪(新文件(电影));
扫描器;
while(fileReader.hasNext()){
info=fileReader.nextLine();
lineReader=新扫描仪(信息);
lineReader.useDelimiter(“:”);
String title=lineReader.next();
String director=lineReader.next();
字符串类型=lineReader.next();
int year=lineReader.nextInt();
}
}捕获(FileNotFoundException错误){
System.out.println(“未找到文件”);
}捕获(IOException错误){
System.out.println(“哎呀!出了点问题。”);
}
}
公共int COUNTRES(){
字符串g;
ArrayList gList=新的ArrayList();
(学生:电影){
字符串g=s.getgreen();
if(gList.contains(g)=false){
添加(g);
}
返回gList.size();
}
}
公众谘询委员会(){
ArrayList dList=新的ArrayList();
(学生:电影){
字符串d=s.getDirector();
if(数据列表包含(d)=false){
d.增加(d);
}
返回dList.size();
}
}
公共字符串listGenes(){
ArrayList genreList=新的ArrayList();
}
}**
您的数据库属性(应为Database,小写)的类型为:

ArrayList<MovieDatabase>
您的数据库属性(应为数据库,小写)的类型为:

ArrayList<MovieDatabase>

对于每个循环,您的
应该如下所示(这只是一个示例,因此您必须对其进行调整)

ArrayList list=new ArrayList();
...
用于(电影条目m:列表){
...
}

ArrayList
是一个有效的循环,但是在您的例子中,您试图获取
Strings
当您的列表不包含
Strings
时,您就调用了那些
String
不支持的
Strings
的方法。您必须为每个列表使用正确的类型。

您的每个
循环的
应该是这样的(这只是一个示例,因此您必须对其进行调整)

ArrayList list=new ArrayList();
...
用于(电影条目m:列表){
...
}
ArrayList
是一个有效的循环,但是在您的例子中,您试图获取
Strings
当您的列表不包含
Strings
时,您就调用了那些
String
不支持的
Strings
的方法。您必须为每个列表使用正确的类型。

更改

private ArrayList<MovieEntry> Database = new ArrayList<MovieEntry>();
public MovieDatabase(){
   ArrayList<MovieDatabase> Database = new ArrayList<MovieDatabase>(0);
}
private ArrayList Database=new ArrayList();
公共电影数据库(){
ArrayList数据库=新的ArrayList(0);
}

私有ArrayList数据库;;
公共电影数据库(){
数据库=新的ArrayList(0);
}
更改

private ArrayList<MovieEntry> Database = new ArrayList<MovieEntry>();
public MovieDatabase(){
   ArrayList<MovieDatabase> Database = new ArrayList<MovieDatabase>(0);
}
private ArrayList Database=new ArrayList();
公共电影数据库(){
ArrayList数据库=新的ArrayList(0);
}

私有ArrayList数据库;;
公共电影数据库(){
数据库=新的ArrayList(0);
}

foreach变量的类型(
String
,对于
searchTitle
方法中的循环)必须与参数化类型(
ArrayList
)的类型参数(
MovieEntry
)兼容。情况显然并非如此。以下foreach循环将起作用:

for (MovieEntry title : Database) {
    System.out.println(title);
}

请考虑遵循小写名称字段的约定,即用“<代码>数据库< /COD>”代替“<代码>数据库< /COD> > < < /P> < P> >前驱变量的类型(<代码>字符串< /代码>,在您的代码>搜索标题方法的情况下)调用您的<代码> ARAYLIST/<代码> >必须与参数化类型(

ArrayList
)的类型参数(
MovieEntry
)兼容。情况显然并非如此。以下foreach循环将起作用:

for (MovieEntry title : Database) {
    System.out.println(title);
}

请考虑以下事项

for (Type obj : Collection) {...}
for (MovieDatabase database : Database) {...}
ArrayList<MovieDatabase> Database= new ArrayList<MovieDatabase>();
public ArrayList<String> getTitles() {...}
....
for (String title : Database.getTitles()) {...}