2016-09-22 21 views
0

私は問題の原因だと思うコードの一部を入れましたが、なぜ私が今StackOverFlowにいるのか理解できませんでした。とにかくこのクラスは私のデータを設定し、配列に渡します。配列結果は最後の結果を得続けます

public ArrayList<select.rates> caseGetRates() throws RateTableException, SessionDisconnectedException { 

    try { 
     for(int i=0;i < arrayRate.size();i++){ 
      ArrayList<select.rates> arr = new ArrayList<select.rates>(); 
      this.setPair(array[0]); 
      this.setBid((array[2])); 
      this.setAsk((array[3])); 
      arr.add(this); 
     } 
     return arr; 
     } finally{} 
} 

私は、このクラスに設定されているデータをSystem.out.printするとき、それは私を与える:正しく、私は私が渡したときに、それは私のwebpage.However上に表示することを希望するもの

EUR/USD 
1.12372 
1.12384 

USD/JPY 
100.622 
100.641 

Servlet

try { 
    ArrayList<select.rates> rates = example.caseGetRates(); 

    for(int i=0;i < rates.size();i++){ 
     System.out.println(""); 
     System.out.println(rates.get(i).getPair()); 
     System.out.println(rates.get(i).getBid()); 
     System.out.println(rates.get(i).getAsk()); 
    } 
    request.setAttribute("rates", rates); 
} 
request.getRequestDispatcher("/NewFile.jsp").forward(request, response); 

にデータ私は私のサーブレットに乗る結果は次のとおりです。

USD/JPY 
100.622 
100.641 

USD/JPY 
100.622 
100.641 

結果は2回ループしますが、データが上書きされているように見えますが、なぜこのようなことが起こっているのかわかりません。誰かが私の間違いを指摘することを願っています。

+2

をArrayListに追加する新しいオブジェクトを作成します'' arr.add(this); ''を使用しています。 – f1sh

+0

arrローカル変数の有効範囲を確認してください。それはあなたがそれを返すことができるようにforループの外にあるはずです。また、これの新しいオブジェクトを作成し、それを設定してArraylistに追加します。 –

+0

まず、Javaの基本的な基本について踏み出して学習します。同じコレクションに**同じ**オブジェクトを何度も何度も繰り返して追加するとどうなりますか? JSPやサーブレットを使って自分のやり方を使うときに何が起こるか理解していないときには、JSPやサーブレットに負担をかけないでください。 – GhostCat

答えて

0

forループの外

ArrayListオブジェクトを作成し、内側のループのためのあなたはあなたが同じオブジェクト( `` this``)を変更し、複数のそれを追加

try { 
    ArrayList<select.rates> rates = example.caseGetRates(); 

    for(int i=0;i < rates.size();i++){ 
     // create new object here and then add to ArrayList 
    } 
    request.setAttribute("rates", rates); 
} 
    request.getRequestDispatcher("/NewFile.jsp").forward(request, response);