2012-03-29 68 views
-3

我遇到了我的項目問題。這是一個電影虛擬數據庫。我有兩個類,MovieEntry(小,單個條目)和MovieDatabase(大,下面的代碼)。我得到一個錯誤,返回我的ArrayLists,如searchYear。它說不兼容的類型。爲什麼我不能返回ArrayList?無法返回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

什麼是確切的錯誤? – 2012-03-29 15:26:31

+1

請正確縮進您的代碼 - 目前這非常具有誤導性。 (就我個人而言,我也建議*總是*使用開放/關閉花括號,但這是一個不同的問題。) – 2012-03-29 15:27:06

回答

3

您在返回ArrayList <String>ArrayList<MovieEntry>預期。
ps:即使你的代碼編譯,看起來好像有很多錯誤。

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對象的列表返回值。

0
ArrayList <String> yearMatches 

應該

ArrayList<MovieEntry> yearMatches,因爲你的方法簽名是

ArrayList<MovieEntry> searchYear (int yr) 
4

你聲明你的函數返回ArrayList<MovieEntry>和你正在返回的變量聲明爲ArrayList<String>。你需要改變一個或另一個。

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

你的方法簽名,表示您正在返回一個ArrayList<MovieEntry>但你實際上是返回一個ArrayList<String>

0

您需要更改yearMatches的返回類型searchYear

0

的方法指定你要返回一個ArrayList的,但你試圖返回一個ArrayList中。

將ArrayList更改爲ArrayList,它應該工作。否則你必須構造MovieEntry對象放入你的列表。

希望它有幫助。

0

ArrayList<MovieEntry>ArrayList <String>不兼容。只是不要輸入回報(但我不認爲是正確的)

0

我要猜測錯誤在您的searchYear方法中。您的退貨類型爲ArrayList<MovieEntry>,但是,您返回的是ArrayList<String>,因此爲錯誤。

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; 
} 
+0

你忘了'(MovieEntry year:Database);'。非常令人費解 – UmNyobe 2012-03-29 15:32:39

+0

@UmNyobe:這是一種不同的方法。我只是在看這個具體的方法。 – 2012-03-29 15:44:23