我得到索引超出范围的异常并且无法弄清楚原因,请帮助我。我正在尝试遍历列表。列表大小为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
答案 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替换初始化。它将工作得很好谢谢。