Сравнение вектора в Java - PullRequest
0 голосов
/ 06 марта 2012

Предположим, у меня есть вектор со следующими значениями

id = 100
latitude = 2 .33
longitude = 4.55

id = 200
latitude = 1.00
longitude = 3.00

id = 300
latitude = 2.33
longitude = 4.55 

и у меня есть следующие переменные

int item = 10;
double x = 2.33;
double y = 4.55 

1.) Теперь я хочу сравнить значения двух переменных (x, y) со значением (широта, долгота) в векторе.

2.) Если значение (x, y) равно (широта, долгота), то я добавляю значение переменной элемента в вектор

Моя логика для достижения этой цели заключается в следующем

Vector al;
int size = al.size() //need to adjust the size as and when i add/remove items from al

for(int i=0;i<sz-1;i++)
{
  if(al.get(i).getClass().equals(Double.TYPE)) //Need to ignore id in Vector

   if(a.get(i)==x & a.get(i+1)==y)
    {
      //add the sensor id at i-2 and adjust the size of vector
    }
   else {
          //remove the items 200,1.00,3.00
          // adjust the size of vector
        }

Но приведенный выше код не дает ожидаемого результата. Может ли кто-нибудь предоставить мне рабочий код для получения окончательного результата следующим образом

10,100,2.33,4.55
10,300,2.33,4.55

Обратите внимание, что в ожидаемом o / p отсутствует содержимое 200,1,00,3,00, поскольку значение coz (x, y) не совпадает с (широта, долгота)

Заранее спасибо.

Ответы [ 5 ]

4 голосов
/ 06 марта 2012

Не используйте == с Double объектами.Вы сравниваете их как один и тот же экземпляр , а не одно и то же значение .

. С двойными значениями лучше сравнить разницу, чтобы она была ниже определенного порогового значения, посколькуразличные артефакты округления.

3 голосов
/ 06 марта 2012

Я думаю, что использование побитового И является ошибкой:

if(a.get(i)==x & a.get(i+1)==y)

использовать логическое И:

if(a.get(i)==x && a.get(i+1)==y)

См. Anony-Mousse ответ относительно использования== с объектами.

0 голосов
/ 09 марта 2012

Это способ решить вышеуказанную проблему. Я включаю фрагмент кода

public void manip() {

    System.out.println("ArratList (Before) :" + Array);
    int sz = Array.size();
    for (int i = 0; i < sz - 1; i++) {
        Object o = Array.get(i);
        if (o instanceof Double) {
            if (Array.get(i).equals(x) & Array.get(i + 1).equals(y)) {
                if (i == 1) {

                    Array.add(0, item);
                } else {

                    Array.add(i - 1, item);
                }
                i = i + 3;
            } else {
                Array.remove(i - 1);
                Array.remove(i - 1);
                Array.remove(i - 1);
                i = i - 1;
            }
            sz = Array.size();
        }
    }

    System.out.println("ArratList (After) :" + Array);
 }
0 голосов
/ 06 марта 2012

При работе с коллекцией я бы сказал: используйте Apache Collections - у них есть очень полезный служебный объект CollectionUtils:

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html

0 голосов
/ 06 марта 2012

Поскольку вы знаете, что вектор хранит идентификаторы в позиции 0, 3, ..., (0 mod 3), вы должны начать цикл с i = 1 и увеличивать его на 3 каждый раз:

for(int i=1;i<sz;i+=3)

Тогда вам не нужно проверять, является ли предмет двойным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...