簡體   English   中英

使用weka時java中的NullPointerException

[英]NullPointerException in java when using weka

當我嘗試使用 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());

    }

每當您嘗試訪問某個對象方法或字段但該對象為空或尚未初始化時,就會發生 NullPointerException。 在您的特定情況下,我認為您在評論后在行中收到 NullPointerException 。 只需您的指令:

data = Filter,useFilter(data, _dis);

正在返回空數據(空)和下一行:

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.");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM