簡體   English   中英

ArrayList java.lang.IndexOutOfBoundsException

[英]ArrayList java.lang.IndexOutOfBoundsException

我編輯我的代碼以解決最后一個問題,但是現在當我在做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);
        }
    }
}                                    

您的誤解在這里:

            uns=new ArrayList(10);

這將創建一個容量為10 ...但最初包含零個元素的列表。

然后,您將其稱為:

            uns.add(i,u)

我們可以從異常消息中推斷出i1 當然, 1在列表的當前可索引范圍之外,因此您將獲得該異常。

如果您打算將uns初始化為10個元素,則需要在創建數組后“填充”該數組; 例如

            for (int ii = 0; ii < 10; ii++) {
                uns.add(someValue);
            }

(有第3方庫方法將創建一個填充有給定值的列表。但是對於這種簡單的事情,我不會去尋找...)

ArrayList不稀疏。 您無法為尚未設置的隨機位置添加項目。 您只能在位置0和size()之間插入項目。 這是記錄的行為:

拋出:
IndexOutOfBoundsException如果索引超出范圍(index < 0 || index > size())

您的代碼嘗試將項目添加到位置1,而尚未設置位置0( size()為0)。 您只需要使用add(item) ,或者您可能需要檢查關於i值的假設。

使用new ArrayList(10)初始化ArrayList不會定義大小,只能定義初始容量!

只需使用

uns.add(u);

代替

uns.add(i,u);

之所以收到錯誤,是因為您試圖在位置i上的元素還沒有替換時嘗試替換列表中的元素。

您使用新的ArrayList(10)創建一個空的ArrayList。 該數組列表的初始容量為10個元素,但只要不添加任何內容,它就仍然為空。

當我使用i> 0訪問ArrayList時,將獲得異常。

嘗試改用:

uns.add(u)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM