2010-12-03 248 views
0

私は値を計算し、それにリストを追加するループを持っています。だから、私はそのようなことをします:「重複するローカル変数」エラーが発生するのはなぜですか?

私はリストに同じインスタンスを追加するので、このアプローチはうまくいきません。より詳細には、ループのすべてのサイクルで、私はxに新しい値を割り当て直して、リストに既に追加されているすべての要素の値を変更します(最終的には同じ要素のリストが得られます)。私はすべての時間が、リストに値を追加する新しいインスタンスを作成したいこのように

x = getValue(); 
Integer[] valueToAdd = new Integer[n]; 
for (int i=0; i<n; i++) { 
    valueToAdd[i] = x[i]; 
} 
while (true) { 
    x = getValue(); 
    y = new Integer[n]; 
    for (int i=0; i<n; i++) { 
     valueToAdd[i] = x[i]; 
    } 
    values.add(valueToAdd) 
} 

は、私は次のようでした。この問題を解決するには。しかし、私は重複したローカル変数エラーを取得するので、それは動作しません。

ループ内で同じ変数を何度も宣言しても、このエラーが発生しないことは私には奇妙です。この問題は、最初にループ外に新しい変数を宣言してからループ内に宣言する場合にのみ表示されます。

異なるインスタンスに同じ名前を再使用する方法はありますか?

追加済み いくつかの問題を明確にする必要があります。私はすべてのコードを表示しませんでした。ループ内にbreakコマンドがあります(新しい値を生成できない場合、ループを終了します)。 xおよびvalueは、Integer[]タイプを有する。それは、問題は、私はここに、より詳細にする必要がありgetValue()であることができることを述べたので

は2 を追加しました。実際に私のコードにはgetValue()がありません(私はここでgetValue()を使っています)。私のコードでは私が持っていた:

Integer[] x = new x[n]; 
    while (true) { 
     for (int i=0; i<n; i++) { 
      x[i] = y[i]; 
     } 
     values.add(x) 
    } 

そして、それは私のvaluesリストに私は同一の要素を持っていたので、うまくいきませんでした(と私はすべてのサイクルx上のループで新たな価値を持っていたことを知っています)。

はあなたの問題は、あなたがそれだと思うものではありません3

Why all elements of my list seems to be the same?

+0

「x」の種類は何ですか?どのようにこれらのループは永遠に実行されますか? 「重複するローカル変数エラー」と記述したエラーの*実際のテキスト*は何ですか? – EJP

+0

@EJP、私はループ内にbreakコマンドを持っています(新しい値を生成できない場合、ループを終了します)。 xとvalueにはInteger []型があります。 – Roman

+1

この質問は*極端に不明です。また、解決すべき実際の問題もなく、実際のコードやエラーメッセージもありません。 – Bombe

答えて

2

を追加しました。たとえば、この単純なプログラムを見てみましょう:それは、0から9までの数字を印刷し

String x = null; 
List<String> l = new ArrayList<String>(); 
for (int i = 0; i < 10; i ++) { 
    x = String.valueOf(i); 
    l.add(x); 
} 

System.out.println(l); 

これはJavaが値渡し(check here)ですので。 xへの参照を渡していません。addメソッドのxの値を渡しています。

したがって、問題は同じオブジェクトを返すgetValue()メソッドにあります。

更新:ここで質問が理にかなっています。毎回同じオブジェクトxで作業していて、その状態を変更するだけです。ちょうどループ内で宣言を移動し、異なる値を置くために:あなたはループの外で、それを必要とする場合

while (true) { 
    Integer[] x = new x[n]; 
    ... 
} 

、まあ、単にそこに別の変数を使用します。それはxという名前である必要はありません。とにかくあなたはループの中でそれを使用しないでしょうから。

+0

申し訳ありませんが、私はそれが間違っていると思います。あなたの右のjavaは値渡しを使いますが、 'x'の値は' getValue() 'の結果への参照です。それとも、私は何かが恋しいですか? – scheffield

+0

まあ、上記のコードを試してください。問題がローカル変数であれば、0,1,2,3ではなく、9,9,9,9,9,9,9を出力しました。 – Bozho

+0

@Bozhoあなたのケースでは 'x'は文字列であり、私の場合' x'は 'Integer []'型ですか? – Roman

関連する問題