ArrayList java.lang.IndexOutOfBoundsException

时间:2014-04-08 13:51:49

标签: java java-ee ejb

我编辑我的代码以解决最后一个问题,但现在我在做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);
        }
    }
}                                    

4 个答案:

答案 0 :(得分:3)

你的误会在这里:

            uns=new ArrayList(10);

这会创建一个容量为10的列表...但最初包含零个元素。

然后你称之为:

            uns.add(i,u)

我们可以从异常消息中推断i1。当然,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)