当我尝试使用weka API进行分箱时,除非在Debug注释块中写入,否则它总是会出现NullPointerException。 有人能为我解释一下吗?我是JAVA的新手,已经阅读了文档,但仍然无法弄明白。
这是我的测试pj:
public static void main(String[] args) throws Exception{
Scanner _input = new Scanner(System.in);
String path = "";
System.out.print("Input data path: ");
path = _input.nextLine();
/*Init data source*/
DataSource source = new DataSource(path);
Instances data = source.getDataSet();
/*if (data.classIndex() == -1)
data.setClassIndex(data.numAttributes() - 1);*/
/*Debug section*/ //THIS SECTION WORKS FINE
/*Discretize _dis = new Discretize();
_dis.setInputFormat(data);
_dis.setBins(10);
data = Filter.useFilter(data, _dis);
System.out.print(data.firstInstance());
System.exit(2);*/
System.out.println("Select sub function: \n"
+ "1. Equal-width\n"
+ "2. Equal-depth\n");
System.out.print("Input selection: ");
int select = _input.nextInt();
Discretize _dis = new Discretize();
_dis.setInputFormat(data);
_dis.setAttributeIndices("first-last");
if (select == 1) {
_dis.setBins(_input.nextInt());
}
else {
_dis.setDesiredWeightOfInstancesPerInterval(_input.nextDouble());
_dis.setUseEqualFrequency(true);
}
data = Filter.useFilter(data, _dis); //NULL POINTER EXCEPTION HERE
System.out.print(data.firstInstance());
}
答案 0 :(得分:0)
每当您尝试访问某个对象方法或字段但对象为null或尚未初始化时,都会发生NullPointerException。在您的具体情况下,我认为您在评论之后会在行中获得NullPointerException。只需你的指示:
data = Filter,useFilter(data, _dis);
返回空数据(null)和下一行:
是System.out.print(data.firstInstance());
正在尝试打印数据(或null)firstInstance,这里是异常发生的地方。
要解决此问题,只需在此之前添加控件:
data = Filter.useFilter(data, _dis);
if(data!=null)System.out.print(data.firstInstance());
else System.out.println("Empty data.");