Как заставить его зацикливаться, пока все элементы не будут проанализированы? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть хеш-карта, содержащая 6 элементов, как у меня - E: [x1: 0.4, x2: 0.5, x3: 0.56, x4: 0.45] -

Я пытаюсь сделать этокаждый элемент, пока E не будет пустым.

Проблема здесь в том, что он извлекает первые минуты и останавливается, хотя хэш-карта E по-прежнему содержит элементы, что мне не хватает HashMap E = new 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 ()

1 Ответ

0 голосов
/ 20 апреля 2019

Проблема из 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 найден нулевым.Следовательно, его следует заменить следующим образом:




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



...