Java 变量g可能尚未初始化

Java 变量g可能尚未初始化,java,initialization,try-catch,Java,Initialization,Try Catch,关于我正在进行的这个项目,我有很多问题。这是一个电影的虚拟数据库。我有一个小的MovieEntry类(用于处理单个条目)和一个大的MovieDatabase类,用于跟踪所有10k+条目。在我的第二个searchYear方法以及后续的方法中,我得到了错误“变量g(或d或其他)可能尚未初始化” 我还得到一个弹出错误,上面写着上次编译的警告:unreachable catch子句。抛出的类型java.io.FileNotFoundException已经被捕获。这两个问题我都被难倒了。代码如下: pub

关于我正在进行的这个项目,我有很多问题。这是一个电影的虚拟数据库。我有一个小的MovieEntry类(用于处理单个条目)和一个大的MovieDatabase类,用于跟踪所有10k+条目。在我的第二个searchYear方法以及后续的方法中,我得到了错误“变量g(或d或其他)可能尚未初始化” 我还得到一个弹出错误,上面写着上次编译的
警告:unreachable catch子句。抛出的类型java.io.FileNotFoundException已经被捕获。
这两个问题我都被难倒了。代码如下:

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




}
公共类电影数据库
{
私有ArrayList数据库=新建ArrayList();
公共电影数据库(){
ArrayList数据库=新的ArrayList(0);
}
public int countTitles()引发IOException{
扫描仪文件扫描;
fileScan=新扫描仪(新文件(“movies.txt”);
整数计数=0;
弦动计数;
while(fileScan.hasNext()){
movieCount=fileScan.nextLine();
计数++;
}
返回计数;
}
公共电影(电影条目m){
数据库。添加(m);
}
公共ArrayList searchTitle(字符串子字符串){
用于(电影条目标题:数据库)
系统输出打印项次(标题);
返回null;
}
公共ArrayList搜索类型(字符串子字符串){
用于(电影条目类型:数据库)
System.out.println(体裁);
返回null;
}
公共ArrayList searchDirector(字符串str){
for(电影进入导演:数据库)
系统输出打印(主任);
返回null;
}
公共阵列列表搜索年(国际年){
ArrayList yearMatches=新的ArrayList();
用于(电影条目m:数据库)
m、 年份(年);
if(yearMatches.contains(yr)=false){
字符串sYr=Integer.toString(yr);
年份匹配。添加(sYr);
}
复赛;
}
公共ArrayList searchYear(int-from,int-to){
ArrayList Matches=新的ArrayList();
用于(电影条目m:数据库);
m、 getYear();
匹配。添加();
返回比赛;
}
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(){
ArrayList gList=新的ArrayList();
用于(电影条目m:数据库){
字符串g=m.getGenre(g);
if(gList.contains(g)=false){
添加(g);
}
返回gList.size();
}
}
公众谘询委员会(){
ArrayList dList=新的ArrayList();
用于(电影条目m:数据库){
字符串d=m.getDirector(d);
if(数据列表包含(d)=false){
d.增加(d);
}
返回dList.size();
}
}
公共字符串listGenes(){
ArrayList genreList=新的ArrayList();
}
}
它告诉您,
FileNotFoundException
将处理IOException捕获的内容,因此IOException变得不可访问,因为它永远不会捕获IO Exception,为什么不捕获IO Exception呢

至于初始化

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();
     }
public int countDirectors(){
ArrayList dList=新的ArrayList();
用于(电影条目m:数据库){
字符串d=m.getDirector(d);//此行
if(数据列表包含(d)=false){
d.增加(d);
}
返回dList.size();
}
String d=m.getDirector(d);
可能是问题所在,
d
不会被初始化,除非电影条目中有某些内容,而且据我所知,不会有任何内容,因为您正在将其初始化为空数组列表

ArrayList数据库=新的ArrayList(0);


也许您应该将一个电影数组传递给构造函数,然后将这些电影添加到
数据库
变量中?

这段代码似乎有很多问题

MovieEntry.getgreen()需要什么参数?在这种情况下,您可能不使用g,因为它尚未定义

您提到的异常问题意味着异常已经被捕获,或者可能从未抛出。我相信在这种情况下,IOException从未从try块中的代码中抛出

有许多方法应该返回值,但不返回值,例如:

public String listGenres(){
    ArrayList <String> genreList = new ArrayList<String>();
}
公共字符串listGenes(){
ArrayList genreList=新的ArrayList();
}
此外,java命名约定是对值使用小写的第一个字符(驼峰大小写):

private ArrayList<MovieEntry> database = new ArrayList<MovieEntry>();
private ArrayList database=new ArrayList();
哦,您需要在构造函数中重新初始化数据库变量吗

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

希望这有帮助。

您能告诉我们它是
g
还是
d
,这样我们就知道代码的哪一部分了?您必须比“变量g(或d或其他什么)”更具体一点。行帮助。具体变量名称帮助更多。
public MovieDatabase(){
   ArrayList<MovieDatabase> Database = new ArrayList<MovieDatabase>(0);
}