0

場所のリストからすべての一意の座標を、座標をキーとして、カウントを値として持つ単一の HashMap に追加しようとしています。キーは、「$」記号で連結された経度と緯度です。

//String = coordinates concatinated with '$', Integer = coordinate occurrence count
private HashMap<String, Integer> coordMap = new HashMap<String, Integer>();
    ...
public void addCoords(double longitude, double latitude) {
        //The total count of the state
        stateCount++;
        String coordsConcat = longitude + "$" + latitude;
        //Here we're removing the entry of the existing coord, then re-adding it incremented by one.
        if (coordMap.containsKey(coordsConcat)) {
            Integer tempCount = coordMap.get(coordsConcat);
            tempCount = tempCount + 1;
            coordMap.remove(coordsConcat);
            coordMap.put(coordsConcat, tempCount);
        } else {
            coordMap.put(coordsConcat, 1);
        }


    }

私が抱えている問題は、テストを通じて同じ経度と緯度の座標を 2 つ入力したにもかかわらず、containsKey が常に false を返すことです。

編集: addCords(0,0);5 回試しましたが、HashMap はまだ空です。

編集 2: double の値は、1000 分の 1 までです。

テストケース:

GeoState test = new GeoState("MA");
test.addCoords(0,0);
test.addCoords(0,0);
test.addCoords(0,0);
test.addCoords(0,0);

System.out.println(test.getRegionCoords());

{} これは感謝を返します

4

1 に答える 1

1

これはおそらく精度の問題です。coordsConcat の値を HashMap に入れる前、HashMap に入れた後、containsKey をチェックする前にチェックすることをお勧めします。

この問題の原因となっている値の間にマイナー (またはメジャー) の不一致がある可能性があります。

于 2015-10-18T02:18:21.223 に答える