使用weka时java中的NullPointerException
当我尝试使用WEKAAPI进行装箱时,它总是得到NullPointerException,除非在调试注释块中写入。 有人能给我解释一下吗?我是JAVA新手,已经读过文档了,但还是搞不懂 这是我的测试pj:使用weka时java中的NullPointerException,java,nullpointerexception,weka,Java,Nullpointerexception,Weka,当我尝试使用WEKAAPI进行装箱时,它总是得到NullPointerException,除非在调试注释块中写入。 有人能给我解释一下吗?我是JAVA新手,已经读过文档了,但还是搞不懂 这是我的测试pj: public static void main(String[] args) throws Exception{ Scanner _input = new Scanner(System.in); String path = ""; Syste
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());
}
当您试图访问某个对象方法或字段,但该对象为null或尚未初始化时,就会发生NullPointerException。在您的特定情况下,我认为您在注释之后的行中得到了NullPointerException。只需您的指示:
data = Filter,useFilter(data, _dis);
正在返回空数据(null)和下一行:
System.out.print(data.firstInstance())
正在尝试打印数据的(或null)第一个实例,这里是异常发生的地方
要解决此问题,只需在之前添加一个控件,如下所示:
data = Filter.useFilter(data, _dis);
if(data!=null)System.out.print(data.firstInstance());
else System.out.println("Empty data.");
谢谢你的关心,可能是重复的。但我想知道为什么在调试部分它工作得很好,但在主部分它得到了NPE,我希望var数据工作,但不知道如何修复这一问题,请尝试注释这一行:_dis.setAttributeIndicates(“first-last”);你的输入值是多少?它在调试块中是否与相同的程序一起工作?它与相同的程序一起工作_dis.setAttributeIndexes只是过滤器的一个配置,所以cmt输出该行无关紧要,我已经尝试过了,但仍然不起作用。我认为问题在于过滤器限制太多,这就是为什么要返回空数据。因此,我的建议是尝试对每个过滤器选项逐一进行注释,这样您就可以找出哪一个(甚至可能不止一个)阻止您返回任何数据。