编译错误:变量可能尚未初始化

时间:2015-02-01 01:14:37

标签: java compiler-errors

我试图创建一个方法,为文件中的每个字符添加一个变量。如果文件是:

abcd
abc
ab

然后在函数运行变量之后,它将返回等于9。

这是我到目前为止的代码:

public static double getRow(String filename) {
   double size = 0;
   File f;
   Scanner infile;
   try{
      f = new File(filename);
      infile = new Scanner(f);
   }
   catch (IOException e){
       System.out.println("Error opening the file");
       //System.exit(0); not good
   }
   while(infile.hasNext()) {
       size++;
   }
   infile.close();
   return size;

}

但我一直认为infile尚未初始化。我不确定如何获得我想要的解决方案。

2 个答案:

答案 0 :(得分:1)

由于您要在infile块中初始化try,如果try中出现任何问题,{I} infile将在您尝试使用之后永远不会被初始化catch阻止。

您要做的是让您在try区块中处理所有内容,包括循环播放和关闭infile

public static double getRow(String filename) {
    double size = 0;
    File f;
    Scanner infile;
    try {
        f = new File(filename);
        infile = new Scanner(f);
        while(infile.hasNext()) {
            size++;
        }
        infile.close();
    }
    catch (IOException e) {
        System.out.println("Error opening the file");
        //System.exit(0); not good
    }
    return size;
}

答案 1 :(得分:0)

我刚试过这个;错误是“变量infile可能尚未初始化”,这是因为如果行new File中存在异常,则不会出现异常。

有几种解决方案,但最好的方法是确保在不保证已初始化时不要尝试使用infile,例如将代码置于{{1}内如上所述阻止。

这是我的版本:

try

理想情况下,您还要将import java.util.*; import java.io.*; class Foo { public static double getRow(String filename) { double size = 0; File f; Scanner infile ; try{ f = new File(filename); infile = new Scanner(f); while(infile.hasNext()) { size++; } infile.close(); return size; } catch (IOException e){ System.out.println("Error opening the file"); //System.exit(0); not good } return -1; } public static void main(String[] argv){ System.out.printf("ResultsL %d\n", getRow("foo.txt")); return ; } } 设为public static int,因为您正在计算某些内容,这是一个离散值,而不是真实值。