-3

イライラする問題があるようです - 配列リストの要素が上書きされています。多くのフォーラムで多くの投稿を見てきましたが、解決できませんでした。:チョップ:

私のプログラム (実際には Java で実装された FBDK 関数ブロック アルゴリズム) で、入力変数 (PART) のデータを出力変数配列 (PART_array) の要素に格納したいと考えています。このプロセスは (イベントの発生により) 複数回発生するため、変数を複数の配列要素に格納する必要があります。

問題は、PART_array の要素が最後のエントリによって上書きされることです。たとえば、最初のイベント発生の場合、PART_array[] = ["1"," "," "," "," "," "]. 次に、2 番目のオカレンスで、PART_array[] = ["1","2"," "," "," "," "] の代わりに、PART_array[] = ["2","2", " "、" "、" "、" "] - したがって、上書きを示します。PART_ARRAY ArrayList への格納ですでに上書きが発生していることに気付きました。(p = new Part()) を再初期化することで問題は解決すると思いました...明らかにそうではありません。

この問題を解決するための助けがあれば、大歓迎です! コードは次のとおりです。

public class STORE_TO_ARRAY extends fb.rt.FBInstance {

    public ArrayList<Part> PART_ARRAY = new ArrayList<Part>();
    Part p = new Part();

    /** The default constructor. */
    public STORE_TO_ARRAY() {
       super();
    }

    /** ALGORITHM REQ IN Java*/ -- a method called in the program
    public void alg_REQ() {
        int ct = 0;
        ct = current_task;
        if (ct <= NumOfTasks) {
            //write received input data to output variable array elements
            //this is where the problem occurs!!!!
            p.setPart(PART); //set value of Part
            PART_ARRAY.add(ct-1,p); //adding to arraylist
            Part p = new Part(); //trying to reinitialise the object    
        }
    }
}

Part のクラス ファイルは次のとおりです。

public class Part {
    WSTRING part;
    void setPart(WSTRING part) {
        this.part = part;
    }
    WSTRING getPart() {
        return part;
    }
}
4

1 に答える 1

0

以下のコードは、クラス変数に新しい値を割り当てるのではなく、ローカル変数を作成します (次の行では、スコープ外になり、使用される前に消えます)。行う)。

Part p = new Part(); //trying to reinitialise the object

で置き換えてみてください

p = new Part(); //trying to reinitialise the object

ちなみに、適切な IDE (NetBeans など) では、クラス変数を非表示にするローカル変数の作成に関する警告が表示されます。

于 2012-11-27T12:16:36.087 に答える