-1

我的索引超出范围异常并且无法找出原因,请帮助我。我正在尝试遍历列表。列表大小为 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
4

6 回答 6

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

index 从零开始,size()返回此列表中的元素数。如果你使用 <=,i 值将超过列表中的元素数量,结果IndexOutofBoundsException

所以上面的代码应该是

for(int i = 0;i< list.size(); i++)
于 2013-01-10T05:32:18.817 回答
0

在你的 for 循环中使用list.size() - 1而不是:list.size()

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

或更改<=<喜欢:

for(int i = 0;i<list.size(); i++)
于 2013-01-10T05:32:34.647 回答
0
for(int i = 0;i<=list.size(); i++)

将其更改为

int size = list.size();
for(int i = 0;i<size; i++)
于 2013-01-10T05:33:03.843 回答
0

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

for(int i = 0; i < list.size(); i++)
于 2013-01-10T05:36:34.133 回答
0

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

这将在三次迭代(0,1,2)中返回 true

将您的“for”语句更改为

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

应该修复它。

于 2013-01-10T05:37:03.210 回答
0
public void display(ArrayList list) {

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

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

它在这里显示您正在将变量初始化为 0,并且在您放置 <= 的条件下,将条件替换为 < 或将初始化替换为 1。它会正常工作,谢谢。

于 2013-01-10T05:48:39.623 回答