2012-03-29 22 views
0

Ich habe viele Fragen zu diesem Projekt, an dem ich gerade arbeite. Es ist eine virtuelle Datenbank für Filme. Ich habe eine kleine MovieEntry-Klasse (um einzelne Einträge zu verarbeiten) und eine große MovieDatabase-Klasse, die alle 10k + -Einträge verfolgt. In meiner zweiten searchYear-Methode sowie in nachfolgenden Methoden bekomme ich den Fehler "Variable g (oder d oder was auch immer) wurde möglicherweise nicht initialisiert." Ich bekomme auch einen Pop-up-Fehler, der sagt Warnings from last compilation: unreachable catch clause. thrown type java.io.FileNotFoundException has already been caught. Ich bin positiv auf beiden ratlos. Hier ist der Code:Variable g wurde möglicherweise nicht initialisiert

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<String> 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 m : Database); 
      m.getYear(); 
      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

können Sie uns bitte sagen, ob es 'g' oder' d' ist, so dass wir wissen, welchen Teil des Codes zu betrachten? –

+0

Sie müssen etwas genauer sein als 'Variable g (oder d oder was auch immer)'. Linien helfen. Spezifische Variablennamen helfen mehr. –

Antwort

2
catch(IOException error){ 
      System.out.println("Oops! Something went wrong."); 
     } 

Sein Sie sagen, dass die FileNotFoundException wird behandeln, was die IOException ist ansteckend, so dass die IOException nicht mehr erreichbar ist, wie in es wird nie einen IO exceltion fangen, warum nicht nur eine Exception fangen statt

Wie für die Initialisierung

public int countDirectors(){ 
    ArrayList <String> dList = new ArrayList<String>(); 
    for(MovieEntry m : Database){ 
     String d = m.getDirector(d); //THIS LINE 
     if(dList.contains(d) == false){ 
      dList.add(d); 
     } 
     return dList.size(); 
    } 

die Linie String d = m.getDirector(d); könnte das Problem sein, d würde nicht initialisiert werden, wenn es etwas in der MovieEntry und soweit ich nichts sehen kann wird es nie sein, weil Sie es auf eine leere Array Liste

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

Vielleicht sollten Sie initialisiert eine Reihe von werden vorbei Filme zum Konstruktor und fügen Sie dann diese Filme zur Database Variable hinzu?

0

Scheint, dass es eine Reihe von Problemen mit diesem Code gibt.

Welchen Parameter erwartet MovieEntry.getGenre()? Sie dürfen in diesem Fall nicht g verwenden, weil es noch nicht definiert wurde.

Das von Ihnen erwähnte Ausnahmeproblem bedeutet, dass die Ausnahme bereits abgefangen oder möglicherweise nie ausgelöst wurde. Ich glaube, dass in diesem Fall die IOException nie aus dem Code innerhalb des try-Blocks herausgeworfen wird.

Es gibt eine Reihe von Methoden, die angeblich einen Wert zurückgeben, aber nicht, Beispiel:

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

Auch ist es eine Java-Namenskonvention kleingeschrieben verwenden erste Zeichen (Kamel Fall) für Werte :

private ArrayList<MovieEntry> database = new ArrayList<MovieEntry>(); 

Oh, und tun müssen, um die Datenbank Variable im Konstruktor ?:

public MovieDatabase(){ 
    ArrayList<MovieDatabase> Database = new ArrayList<MovieDatabase>(0); 
} 
neu initialisieren 10

Ich hoffe, das ist hilfreich.

Verwandte Themen