2016-06-29 7 views
0

This programmers stack exchange question私はJavaプログラミングのコンセプトにコンセプトを教えてくれました。オブジェクトはポインタとして渡されます。そのことを知ると、そのコンセプトのために私のコードに問題があります。コンテナをパラメータとして渡し、その値を変更しない方法Java?

public double findRollingPivots(ArrayList<Double> listOfCurrentPivots, ArrayDeque<Double> dequeOfAllPivots, double rollingPeriodLength) { 
    double returnSignal = 0; //this is whatever signal to be returned-- BD BO or profit target 
    double containerOfPivots = 0; //this holds all of the pivots to be divided in dequeOfCurrentPivots 
    listOfCurrentPivots.remove(4); /***line4***/ 
    listOfCurrentPivots.add(dequeOfAllPivots.removeLast()); 

    for (int i = 0; i < rollingPeriodLength; i++) { /***line 6***/ 
     containerOfPivots += listOfCurrentPivots.get(i); 
    } 

    returnSignal = containerOfPivots/rollingPeriodLength; 

    return returnSignal; 

私の問題は、4行目で、私は常に第四インデックスにある要素を削除しないことである。

は、ここに私のコードです。 dequeremoveLast()と呼び出し、毎回新しい要素をpushと呼ぶほうがはるかに簡単です。

しかし、dequeを使用すると、6行目で、変数をcontainerOfPivots変数に追加すると、すべての要素が失われてしまいます。私は一時的なdequeを作成してこれを回避しようとしましたので、パラメータの値を保持することができますが、それはどちらも動作しません。だから、dequeを使用する方法があり、関数内のサイズを枯渇させる心配はありませんか?私は何か見落としていますか?

+1

なぜイテレータを使用しないのですか? – xenteros

+0

私はイテレータを知らなかった。私はjavaに新しいです。提案のおかげで –

+0

これはリストの主な目的です。次/前のポインタに直接アクセスできない場合は、イテレータが必要です。 – xenteros

答えて

1

あなたの質問を正しく理解している場合(あなたの関数内の元のリストを変更しないようにしたい場合)、同じ要素のコレクションをコピーすることができます。 newListに行われた

List<Double> newList = new ArrayList<Double>(); 
newList.addAll(listOfCurrentPivots); 

すべての変更は、listOfCurrentPivotsに含まれる要素には影響を与えません。これにより、私たちが扱っているデータの量が複製されることはありません。各リストはメモリ内の同じオブジェクトを参照します。 Doublesを扱っているので、これらのオブジェクトを変更する操作については心配する必要はありません。

+0

私はそれを試みるつもりです。ありがとう、私はこれが方法であることを知らなかった。 –

関連する問題