2013-03-03 87 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