我编辑我的代码以解决最后一个问题,但现在我在做System.out.println(uns.get(0));我得到NULL但System.out.println(uns.get(0));它结果了! oopps
Ok I SOLVE THE PROB NOW i'm adding uns=new ArrayList(10);
for (int ii = 0; ii < 10; ii++) {
uns.add(null);
} to Construct
http://i.stack.imgur.com/9rNTa.png
我编辑这些指令
if(i==0)
{ uns.add(i,u);
}
if(i==1)
{
uns.add(i,u);
}
i++;
感谢所有
private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
int ligneNom = jTable1.getSelectedRow();
int colonneNom = jTable1.getSelectedColumn();
DefaultTableModel model = (DefaultTableModel) jTable2.getModel();
row = new Vector();
if(colonneNom==0)
{
try {
int numUnite=Integer.parseInt(jTable1 .getValueAt(ligneNom, 0).toString());
operation3 o3=new operation3();
uns=new ArrayList(10);
for (int ii = 0; ii < 10; ii++) {
uns.add(null);
}
System.out.println(numUnite);
u=o3.getUnite(numUnite);
System.out.print(u);
uns.add(i,u);
System.out.println(uns.get(0));
System.out.println(uns.get(1));
i++;
row.add( jTable1 .getValueAt(ligneNom, 0));
row.add( jTable1 .getValueAt(ligneNom, 1));
model.addRow(row);
jTable1.clearSelection();
} catch (NamingException ex) {
Logger.getLogger(employeihm.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
答案 0 :(得分:3)
你的误会在这里:
uns=new ArrayList(10);
这会创建一个容量为10的列表...但最初包含零个元素。
然后你称之为:
uns.add(i,u)
我们可以从异常消息中推断i
是1
。当然,1
超出了列表的当前可索引范围,因此您得到了该异常。
如果您的意图是uns
应该使用10个元素进行初始化,那么您需要在创建数组后“填充”该数组; e.g。
for (int ii = 0; ii < 10; ii++) {
uns.add(someValue);
}
(有第三方库方法会创建一个用给定值填充的列表。但对于这个简单的东西,我不会去寻找......)
答案 1 :(得分:2)
ArrayList
并不稀疏。您无法为尚未设置的随机位置添加项目。您只能在位置0和size()
之间插入项目。这是documented行为:
<强>抛出:强>
IndexOutOfBoundsException
- 如果索引超出范围(index < 0 || index > size())
您的代码尝试将项目添加到位置1,而位置0尚未设置(size()
为0)。您只需使用add(item)
,或者您需要检查有关i
值的假设。
使用ArrayList
初始化new ArrayList(10)
并未定义大小,只定义初始容量!
答案 2 :(得分:0)
只需使用
uns.add(u);
而不是
uns.add(i,u);
您收到错误是因为当该位置尚无任何元素时,您尝试替换位置i
列表中的元素。
答案 3 :(得分:0)
使用新的ArrayList(10)创建一个空的ArrayList。此数组列表的初始容量为10个元素,但只要您不向其添加任何内容,它仍为空。
使用i&gt;访问ArrayList时0,那么你将获得例外。
尝试改为使用:
uns.add(u)