2012-03-29 16 views
0

私は映画のための仮想データベースを作成するプロジェクトに取り組んでいます。私は2つのクラスを持っています:MovieEntry(個々のムービーエントリ用)とMovieDatabase(データベースを含み、追加などを可能にするより大きいクラス)私はいくつかのエラーを出しています。その最初はsearchTitleメソッドデータベースは互換性のないタイプであると言います。誰も私にこれらの操作を行う方法を教えてもらえますか?私は本を​​読んで、ArrayListはそこに行こうと思ったが、明らかにそうではないと思った。For Each Loop互換性のないタイプ

ArrayList<MovieDatabase> 

そして、あなたは、要素の型として文字列を使用して、それを反復処理しようとしている:

**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>(); 

    } 

}** 
+0

「movies」の宣言を追加できますか? – hmjd

答えて

0

データベースのプロパティ(データベース、小文字でなければなりません)、タイプのものです。

あなたのforeachは次のようになります。

for(MovieDatabase element: Database){ 
.... 
} 
0

次のようになりますあなたのfor-eachループ(これはあなたがあなたのためにそれを適応させる必要がありますので、あくまでも一例である)

ArrayList<MovieEntry> list = new ArrayList<MovieEntry>(); 
... 
for(MovieEntry m : list) { 
    ... 
} 

ArrayListループするのは有効ですが、あなたのリストではStringsが得られない場合はStringsを取得しようとしていますStringsのメソッドを呼び出す場合Stringサポートしていません。各リストに適切なタイプを使用する必要があります。

0

変化

private ArrayList<MovieEntry> Database = new ArrayList<MovieEntry>(); 
public MovieDatabase(){ 
    ArrayList<MovieDatabase> Database = new ArrayList<MovieDatabase>(0); 
} 

private ArrayList<MovieEntry> Database;; 
public MovieDatabase(){ 
    Database = new ArrayList<MovieDatabase>(0); 
} 
2

(あなたsearchTitle方法におけるループの場合String)foreachの変数の型の型パラメータと互換性がなければならない(MovieEntry)にパラメータ化されたタイプ(ArrayList<MovieEntry>)。これは明らかにそうではありません。以下のforeachループは動作します:

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

はすなわち、このようなdatabaseの代わりDatabaseとして名前を使用してArrayList<MovieEntry>を呼び出して、フィールドに小文字の名前を使用しての大会以下の点を考慮してください。

0

まあ

for (Type obj : Collection) {...} 

コレクションがType型の要素を保持している場合にのみ機能します。これは、実質的にあなたのケースでは意味:

ArrayList<MovieDatabase> Database= new ArrayList<MovieDatabase>(); 

データベース内のタイトルをループする場合は、戻っています方法を提供する必要があります。データベースがタイプMovieDatabaseを保持するのArrayListですので

for (MovieDatabase database : Database) {...} 

は動作します

public ArrayList<String> getTitles() {...} 
.... 
for (String title : Database.getTitles()) {...} 
関連する問題