我有一个包含6个元素的hashmap作为 我有 -E:[x1:0.4,x2:0.5,x3:0.56,x4:0.45]-
我想做的是遍历每个元素,直到E为空。
这里的问题是它检索了第一分钟,然后停止,但是E哈希图仍然包含元素,我想念的是什么 HashMap E =新的HashMap <>(); //不是E不为空,而是在上面实例化的
HashSet<Integer> dataPoints = new HashSet(); //list of points for each xmin
HashMap<Integer, List<Integer>> clusters = new HashMap<>();
ArrayList<Integer> listt = new ArrayList<>();
List<Integer> l = new ArrayList<>(); //list of points for each xmin
System.out.println("size one :"+dataPoints.size());
while (!E.isEmpty()) {
int xMin = getKey(E, MinX(E, dataPoints));
dataPoints.add(xMin);
System.out.println("Xmin " + xMin);
E.remove(xMin);
//checking id X exists in data points if no return close elements
for (int j = 0; j < S.getRow(xMin).length; j++) {
if (S.getEntry(xMin, j) > beta) {
l.add(j);
dataPoints.add(j);
E.remove(j);
}
}
clusters.put(xMin, l);
这是Minx函数
public double MinX(ConcurrentMap<Integer, Double> e, HashSet<Integer> h) {
double tmpMin = 1;
//int Xmin = 0;
for (int k = 0; k < e.size(); k++) {
if ((e.get(k) < tmpMin) && (!h.contains(e.get(k)))) {
tmpMin = e.get(k);
}
}
return tmpMin;
};
现在这给了我空指针异常```
在MinX()
答案 0 :(得分:0)
问题来自
public double MinX(ConcurrentMap<Integer, Double> e, HashSet<Integer> h) {
double tmpMin = 1;
for (int k = 0; k < e.size(); k++) {
if ((e.get(k) < tmpMin) && (!h.contains(e.get(k)))) {
tmpMin = e.get(k);
}
}
return tmpMin;
};
发现e ConcurrentMap的最后一个元素为null。 因此,应将其替换为:
public double MinX(ConcurrentMap<Integer, Double> e, HashSet<Integer> h) {
double tmpMin = 1;
for (Integer k : e.keySet()) {
System.out.println("E inside fo"+e.get(k));
if (e.get(k) < tmpMin && !h.contains(e.get(k)))
{
tmpMin = e.get(k);
}
}System.out.println("min entropy is: " + tmpMin);
return tmpMin;}