2013-01-10 63 views
-1

我得到索引超出界限例外,無法找出原因,請幫助我。我試圖遍歷列表。列表大小是2.我試圖創建動態表並打印列表。獲取IndexOutofBoundsException,無法找出原因

public void display(ArrayList list) { 

      TableLayout tl = (TableLayout) findViewById(R.id.main_table); 

      for(int i = 0;i<=list.size(); i++){ 

       EmployeeBean empList = (EmployeeBean) list.get(i); 

       int count = 0; 

       TableRow tr = new TableRow(this); 
       tr.setId(100+count); 
       tr.setLayoutParams(new LayoutParams(
         LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT)); 
       tr.setClickable(true); 

       final TextView empName = new TextView(this); 
       empName.setId(200+count); 
       empName.setText(empList.getName()); 
       tr.addView(empName); 

       final TextView empStream = new TextView(this); 
       empStream.setId(200+count); 
       empStream.setText(empList.getStream()); 
       tr.addView(empStream); 

       final TextView empLevel = new TextView(this); 
       empLevel.setId(200+count); 
       empStream.setText(empList.getLevel()); 

       final TextView empDesignation = new TextView(this); 
       empDesignation.setId(200+count); 
       empDesignation.setText(empList.getDesignation()); 

       tl.addView(tr, new TableLayout.LayoutParams(
         LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT)); 
       count++; 

       tr.setOnClickListener(new OnClickListener() { 

        public void onClick(View v) { 

         outpuText = new TextView(MainActivity.this); 
         outpuText.setText("Name: " + empName.getText() + "\n" 
           + "Stream: " + empStream.getText() + "\n" + "Level: " 
           + empLevel + "\n" + "Designation :" + empDesignation); 
         setContentView(outpuText); 

        } 
       }); 

      } 

其中我收到的例外是

java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 
+0

6個答案都指出同樣的東西! – Sikorski

回答

2
for(int i = 0;i<=list.size(); i++) 

指數從零開始,size()返回此列表中元素的個數。如果您使用< =,我值將超過列表導致IndexOutofBoundsException元素的數量,

所以上面的代碼應該是

for(int i = 0;i< list.size(); i++) 
0

使用list.size() - 1而不是list.size()在for循環:

for(int i = 0;i<=(list.size() - 1); i++) 

或將<=更改爲<如:

for(int i = 0;i<list.size(); i++) 
0
for(int i = 0;i<=list.size(); i++) 

將其更改爲

int size = list.size(); 
for(int i = 0;i<size; i++) 
0

由於i從零開始,和size()將返回數組中的對象的數量,你for循環應該被修改爲:

for(int i = 0; i < list.size(); i++) 
0

指數從0開始,並且您正在測試列表大小爲'小於或等於'

,將三個迭代(0,1,2)

改變你 '的' 語句返回true以

for(int i = 0; i<list.size(); i++){ 

應該修復它。

0
public void display(ArrayList list) { 

     TableLayout tl = (TableLayout) findViewById(R.id.main_table); 

     for(int i = 0;i<=list.size(); i++){ 

在這裏,你是initializating變量爲0表示在條件你放置< = 與<更換條件或1.更換初始化它西港島線的工作,謝謝。