-2

Keypointsというクラスがあり、さまざまなキーポイントオブジェクトを格納する配列リストを作成したいと思います。これは、キーポイントリストをデカールして初期化する方法です。

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

だから私のコードでは、キーポイントオブジェクトをリストに追加するforループがあります:

            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();
    }

すべての値が異なると確信しているにもかかわらず、リスト内のすべての要素に対してscale、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;
}

}

4

1 に答える 1

0

表示されているコードはコンパイルされません。ただし、エラーは、実際のコードで何が問題になっているのかを示唆しています。

のすべてのゲッターKeypointstatic

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

これは、対応するデータメンバーもである場合にのみコンパイルできstaticます。つまり、クラスのすべてのインスタンスで共有されます。

于 2013-03-03T07:52:06.760 に答える