0

これは、キーを出力しようとしているコードですが、実行されることはなく、最後の行に移動して null ポインター例外をスローするだけです。

Enumeration<String> keys = states.keys();
        int max=0;
        String maxClass="";
        while(keys.hasMoreElements())
        {
            String key = keys.nextElement();
            System.out.println(key);
                if(states.get(key)>=max)
                {
                    max=states.get(key);
                    maxClass=key;
                }
                System.out.println(maxClass);
        }
        System.out.println(maxClass);
        Category c = classes.get(maxClass);
        c.add(p);

これは分類関数の完全なコードです。

static void classify(ArrayList<Point> cities,Hashtable<String,Category> classes)
{
    for(Point p: cities)
     {
        ArrayList<Point> nbours = new ArrayList<Point>();
        nbours.addAll(getNbours( p,cities));
        // System.out.println(p.city);
        Hashtable<String,Integer> states = new  Hashtable<String,Integer>();
        for(Point pt : nbours)
        {
                //System.out.println(pt.city);

                if(states.containsKey(pt.state))
                {
                    int cnt = states.get(pt.state) + 1;
                    states.remove(pt.state);
                    states.put(pt.state,cnt);
                    //states.add(state,);
                }
                else
                {
                    states.put(pt.state,1);
                }
                //System.out.println(states.get(pt.state));
        }

        Enumeration<String> keys = states.keys();
        int max=0;
        String maxClass="";
        System.out.println(keys);
        while(keys.hasMoreElements())
        {
            String key = keys.nextElement();
            System.out.println(key);
                if(states.get(key)>=max)
                {
                    max=states.get(key);
                    maxClass=key;
                }
                System.out.println(maxClass);
        }
        System.out.println(maxClass);
        Category c = classes.get(maxClass);
        c.add(p);
        System.out.println(p.city+ "Classified");
        nbours.clear();

    }
4

1 に答える 1

1

実行が最終行に達し、NullPointerException が存在する場合、"c" は null です。これは、呼び出しCategory c = classes.get(maxClass);が null を返すことを意味します。maxClassのキーがクラス オブジェクトで使用可能かどうかを確認してください。

于 2013-10-18T16:38:30.620 に答える