Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在解析所有元素之前,如何使其循环?_Java_Loops_Hashmap_Hashset - Fatal编程技术网

Java 在解析所有元素之前,如何使其循环?

Java 在解析所有元素之前,如何使其循环?,java,loops,hashmap,hashset,Java,Loops,Hashmap,Hashset,我有一个包含6个元素的hashmap,如下所示 我有 -E:[x1:0.4,x2:0.5,x3:0.56,x4:0.45]- 我要做的是覆盖每个元素,直到E为空 这里的问题是,它检索第一个min并停止,但是E hashmap仍然包含元素,我缺少的是什么 HashMap E=新HashMap();//并不是说E不是空的,而是上面实例化的 HashSet<Integer> dataPoints = new HashSet(); //list of points for each xmin

我有一个包含6个元素的hashmap,如下所示 我有 -E:[x1:0.4,x2:0.5,x3:0.56,x4:0.45]-

我要做的是覆盖每个元素,直到E为空

这里的问题是,它检索第一个min并停止,但是E hashmap仍然包含元素,我缺少的是什么 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);
HashSet dataPoints=newhashset()//每个xmin的点列表
HashMap clusters=新的HashMap();
ArrayList listt=新的ArrayList();
列表l=新的ArrayList()//每个xmin的点列表
System.out.println(“大小一:+dataPoints.size());
而(!E.isEmpty()){
intxmin=getKey(E,MinX(E,dataPoints));
dataPoints.add(xMin);
System.out.println(“Xmin”+Xmin);
E.移除(xMin);
//如果没有返回关闭元素,则检查数据点中是否存在id X
for(int j=0;jbeta){
l、 加(j);
数据点。添加(j);
E.移除(j);
}
}
簇。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;
    };
public-double-MinX(ConcurrentMap e,HashSet h){
双tmpMin=1;
//int Xmin=0;
对于(int k=0;k
现在这给了我空指针异常```

在MinX()

上,问题来自

公共双MinX(ConcurrentMap e,HashSet h){
双tmpMin=1;
对于(int k=0;k

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;}




公共双MinX(ConcurrentMap e,HashSet h){
双tmpMin=1;
for(整数k:e.keySet()){
System.out.println(“E-inside-fo”+E.get(k));
如果(e.get(k)
我看到
while(E.size()…)
但我没有看到
E
的任何声明-而且,在循环过程中修改集合(如Map)会导致未定义的行为。唯一安全的方法是使用迭代器,如
youmap.keySet().Iterator()
,并通过迭代器删除,但由于您修改了映射,而不是仍然不确定的键集。您应该研究如何使用
ConcurrentMap
查看一下。我编辑了代码并添加了E的声明方式,请注意,它不是空的,它包含的值与我在POST中显示的值相同。我尝试使用ConcurrentMap,但仍然相同发布NPEWaitaminute!你得到了一个
NullPointerException
?你在问题中根本没有这么说——你只说了“检索第一分钟,然后停止”。查看回溯;NPE发生在哪一行?James的注释和链接仍然相关,还可以查看