无法找到"变量的解决方案可能尚未初始化"错误

时间:2014-07-30 16:58:55

标签: java

我的java程序在命令行中从用户获取输入。用户可以选择:他可以使用-inputfile选项指定纯文本文件作为输入,或者可以不指定此选项,在这种情况下,程序从System.in获取输入。 (我已经预先安装了我的Ubuntu发行版的一些程序中观察到了这种行为,因此我推断这是可以接受的做法。)

所以我制作了一个从文件中读取的BufferedReaderinBR)(如果提供),以及从Scanner读取的inScannerSystem.in)除此以外。实际上只实例化了其中一个对象,另一个保留为null。稍后,当程序从输入中读取一行时,我有以下代码:

String line;
if (inBR != null) {
    line = inBR.readLine(); (1)
} else {
    line = inScanner.nextLine(); (2)
}

分别在第(1)行和第(2)行给出了编译时错误variable inBR might not have been initializedvariable inScanner might not have been initialized

这里可接受的解决方案是什么?我已经考虑过,"初始化那个应该为null的变量作为一个Object来关闭编译器。"但这只是一个黑客;肯定有更好的方法。

另外,为什么这不是运行时异常,因为NullPointerException

编辑:inScanner.readLine()=> inScanner.nextLine()

3 个答案:

答案 0 :(得分:4)

以这种方式声明它们可以避免编译错误:

BufferedReader inBR = null;
Scanner inScanner = null;

当然,您在访问它们之前仍需要给它们实际值,否则您将获得NullPointerException

答案 1 :(得分:1)

在java中,必须在某些时候初始化所有使用的变量。

public void example(){
  String name;

  if(name == null) return null;

}

在上面的示例中,变量名称尚未初始化。有几种方法可以解决这个问题:

public void example1(){
  String name = null;

  if(name == null) return null;
}

这可以解决问题。

这也可以解决问题

public void exapmle2(){
  String name = "";

  if(name == null) return null;

}

答案 2 :(得分:0)

制定是否提供文件的条件。例如,如果提供了文件,请立即创建缓冲读取器并设置行。否则,创建一个扫描仪并设置该行。

相关问题