获取IndexOutofBoundsException,无法弄清楚原因

时间:2013-01-10 05:31:26

标签: java

我得到索引超出范围的异常并且无法弄清楚原因,请帮助我。我正在尝试遍历列表。列表大小为2.我正在尝试创建动态表并打印列表。

 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

6 个答案:

答案 0 :(得分:2)

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

索引从ZERO开始,size()返回此列表中的元素数。如果您使用&lt; =,则i值将超过列表中导致IndexOutofBoundsException的元素数量,

所以上面的代码应该是

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

答案 1 :(得分:0)

在for循环中使用list.size() - 1代替list.size()

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

或者将<=更改为<,如:

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

答案 2 :(得分:0)

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

将其更改为

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

答案 3 :(得分:0)

由于i从零开始,而size()将返回数组中对象的数量,因此应将for循环修改为:

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

答案 4 :(得分:0)

索引从0开始,您正在测试列表大小是否小于或等于'

将在三次迭代(0,1,2)

中返回true

将'for'语句更改为

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

应该修复它。

答案 5 :(得分:0)

public void display(ArrayList list) {

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

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

此处显示您正在将变量初始化为0,并且条件是您放置&lt; = 用&lt;替换条件或用1替换初始化。它将工作得很好谢谢。