2013-03-03 164 views
-2

我有一个名为Keypoints的类,我想创建一个存储各种关键点对象的数组列表。 我这是怎么decalred并初始化关键点列表:访问arraylist的随机元素产生相同的结果

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相同的值在即使我非常肯定,每一个值是不同的列表中的每个元素。相反,它会返回列表中的最后一个对象。 所以我的问题是,当我把它添加到列表中的对象时是错误的,还是它与我的关键点类的问题?还是完全是另一回事?

下面是关键点

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 2013-03-03 07:46:05

+0

@baraky它只是一个for循环,它通过xi和yi循环来执行关键点构造函数的各种参数的perfrom计算。 – user1926691 2013-03-03 07:50:21

+0

如何为非静态字段获取静态getter? – 2013-03-03 07:53:41

回答

0

你展现不编译代码的类。但是,错误暗示了您的代码中实际发生了什么问题。

所有Keypoint的干将是static

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

这可能只编译如果相应的数据成员也将是static,这意味着它们由类的所有实例共享。

+0

我已经从Keypoint类中删除了静态关键字,但我仍然得到相同的结果。 – user1926691 2013-03-03 07:54:14

+0

@ user1926691:请向我们展示您的*实际*代码,而不是一些近似值。 – NPE 2013-03-03 07:55:10

+0

添加代码。我正在使用JavaCV,并且我正在尝试将OpenCV C++代码翻译成java。但我现在面临的问题与此无关,因为我确信这是使用列表类 – user1926691 2013-03-03 08:05:54