Цикл по хэш-карте и вычисление мин и остановка, когда не осталось точек - PullRequest
1 голос
/ 19 апреля 2019

У меня есть хеш-карта, содержащая (точка, значение), я вычисляю минимальное значение в хеш-карте.Во-вторых, полученную точку я использую для извлечения соответствующих значений из матрицы.затем я сохраняю xmmin, и точки возвращаются в массиве

Моя цель - не учитывать точку, если она уже существует в массиве.Я пытался это, но он застрял с первой минуты.

Вот то, что я попробовал

       List<Integer> dataPoints = new ArrayList(); // Storing parsed elements including Xmin           
       HashMap<Integer, List<Integer>> clusters = new HashMap<>();

       ArrayList<Integer> listt = new ArrayList<>();
       List<Integer> l = new ArrayList<>(); //list of points for each xmin
       while(E.size()!=dataPoints.size()) {
       int xMin = getKey(E,MinX(E));
       System.out.println("Xmin "+xMin);
       if (!existsX(dataPoints, xMin)) {

       dataPoints.add(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);          

                   }
               }
           }

Вот функция IfExists


       for (int k = 0; k < dataPoints.size(); k++) {
           if (dataPoints.get(k) != xMin) {
               return false;
           }

       }
       return true;

   }

How can I achieve that

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

В настоящее время ваш existsX -метод содержит следующее:

for (int k = 0; k < dataPoints.size(); k++) {
  if (dataPoints.get(k) != xMin) {
    return false;
  }
}
return true;

Который немедленно вернет false на первый элемент, который не является xMin, а вы хотите достичь обратного: вернуть true, как только xMin будет найдено следующим образом:

for (int k = 0; k < dataPoints.size(); k++) {
  if (dataPoints.get(k) == xMin) {   // != has been changed to ==
    return true;                     // Return true as soon as we've found it
  }
}
return false;                        // Return false if it wasn't found

А еще лучше - больше полагаться на встроенные функции, которые сделают всю работу за вас. В этом случае ваш:

if(!existsX(dataPoints,xMin))

Может быть изменено на:

if(!dataPoints.contains(xMin))

Так что вам не нужно создавать собственный existsX -метод. Здесь JavaDocs для встроенного List#contains.

1 голос
/ 19 апреля 2019

Ваш ifExists должен быть

   for (int k = 0; k < dataPoints.size(); k++) {
       if (dataPoints.get(k) == xMin) {
           return true;
       }
   }
   return false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...