2013-03-03 2 views
-2

У меня есть класс под названием Keypoints, и я хочу создать список массивов, в котором хранятся различные объекты ключевых точек. Это, как я decalred и инициализирую список ключевых точек:Доступ к случайному элементу массива дает те же результаты

private static List<Keypoint> m_keyPoints = new ArrayList<Keypoint>(); 

так в моих кодах, у меня есть цикл, который добавляет ключевые точки объектов в список:

  for(xi=0;xi<width;xi++) 
      { 
       for(yi=0;yi<height;yi++) 
       { 
        /*Calculation for scale,mag,orien*/ 

         // Save this keypoint into the list 
         Keypoint kp =new Keypoint(xi*scale/2, yi*scale/2, mag, orien, i*m_numIntervals+j-1); 
         m_keyPoints.add(kp); 
       } 
      } 

Но теперь, когда я пытаюсь доступ к случайному элементу из списка, я всегда получаю одинаковые результаты.

for(int ikp = 0;ikp<m_numKeypoints;ikp++) 
    { 
     Keypoint key =m_keyPoints.get(ikp); 
     int scale = key.s(); 
     float kpxi = key.xi(); 
     float kpyi = key.yi(); 
    } 

Я подвожу то же значение масштаба, kpxi и kpyi для каждого элемента в списке, хотя я очень уверен, что каждое значение отличается. Вместо этого он возвращает последний объект в списке. Итак, мой вопрос: я делаю это неправильно, когда дело доходит до добавления объекта в список или это проблема с моим классом keypoint? или это совсем другое?

Ниже класс для Keypoint

import java.util.List; 
public class Keypoint { 
public float   xi; 
public float   yi; 
public List<Double> orien ; 
public List<Double> mag; 
public int scale; 

public Keypoint(){} 

public Keypoint(float x, float y, List<Double> magnitude, List<Double> orientation, int s) 
{ 
    xi = x; 
    yi = y; 
    mag = magnitude; 
    orien = orientation; 
    scale = s; 
} 
public static float xi() 
{ 
    return xi; 
} 
public static float yi() 
{ 
    return yi; 
} 
public static int s() 
{ 
    return scale; 
} 
public static List<Double> mag() 
{ 
    return mag; 
} 
public static List<Double> orien() 
{ 
    return mag; 
} 

}

+2

Покажите нам цикл добавления – BobTheBuilder

+0

@baraky Это просто цикл for, который проходит через вычисления xi и yi для вычисления параметров для различных параметров для конструктора Keypoint. – user1926691

+0

Как у вас есть статический геттер для нестатического поля? –

ответ

0

Код, который вы показываете не компилируется. Однако ошибки подсказывают, что происходит в вашем действительном.

Все геттеры Keypoint являются static:

public static float xi() { return xi; } 
public static float yi() { ... } 
public static int s() { ... } 
... 

Это может составить только если соответствующие данные члены также будут static, что означает, что они разделяются всеми экземплярами класса.

+0

Я удалил статическое ключевое слово из класса Keypoint, но все равно получаю те же результаты. – user1926691

+0

@ user1926691: Пожалуйста, покажите нам свой * фактический * код, а не его приближение. – NPE

+0

добавленный код. Я использую JavaCV, и в настоящее время я пытаюсь перевести код OpenCV C++ в java. Но проблема, с которой я сейчас сталкиваюсь, совсем не связана с этим, поскольку я уверен, что это проблема с моим использованием класса списка – user1926691

Смежные вопросы