2016-09-22 97 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我在這個類中設置的數據它給了我:

EUR/USD 
1.12372 
1.12384 

USD/JPY 
100.622 
100.641 

這是正確的,我想什麼,當我通過它顯示在我的webpage.However數據我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); 

結果我得到我的Servlet是:

USD/JPY 
100.622 
100.641 

USD/JPY 
100.622 
100.641 

結果不會循環兩次,但數據似乎被覆蓋,我仍然不知道爲什麼會發生這種情況。我希望有人能指出我的錯誤。

+2

您修改同一個對象(''this''),然後將其添加多個次'使用''arr.add(this);''。 – f1sh

+0

檢查arr局部變量的範圍。它應該在for循環之外,所以你可以返回它。同時創建這個新的對象,設置它並添加到Arraylist。 –

+0

您首先回顧並瞭解Java的基本基礎知識。就像將**相同的**對象反覆添加到某個集合時發生的情況一樣。當你甚至不明白當你使用* this *的方式時會發生什麼,不要讓JSP和servlet負擔過重。 – GhostCat

回答

0

創建外ArrayList對象循環

,並在for循環中創建新對象要添加到ArrayList的

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