2012-03-10 76 views
0

我有個小問題我遇到錯誤java.lang.IndexOutOfBoundsException:指數:29,尺寸:29當我啓動這一個代碼錯誤是本着if ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd"))但不知道爲什麼指數應爲30不29 ANY1可以幫助?IndexOutofBoundException爲什麼?

for (int y = 0; y < harm.size(); y++) {//wiersze 
      c1 = new PdfPCell(new Phrase(harm.get(y).nazwa, stdFont)); 
      c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
      table.addCell(c1); 
      c1 = new PdfPCell(new Phrase("" + harm.get(y).getSumaGodzin() + "/" + harm.get(y).normaGodzin, smallFont)); 
      c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
      table.addCell(c1); 
      for (int x = 0; x < harm.get(y).dni.size(); x++) {//kolumny 
       c1 = new PdfPCell(new Phrase(harm.get(y).dni.get(x).godziny, smallFont)); 
       //dla swiąt ustal kolor tła na czerwono 
       //dla niedziel ustala kolor tla na czerwony 
       if ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) { 
        c1.setBackgroundColor(BaseColor.RED); 
       } 

回答

1

它看起來像你遍歷(Y).dni和裏面的所有harm.get的元素循環您 做

if ((listaSwiat != null && listaSwiat.get(x) != null) 
|| harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) 

最後一次通過循環X = 28,大小爲29,但你做

harm.get(y).getDzienTygodnia(x + 1) 

所以,你得到的點29是出界的元素, BEC澳洲英語像其他答案爲0而不是1所列的指數開始你必須在這裏增加一個檢查,看看你是否正在檢查下一個索引之前的最後一個索引。

3

在Java(和許多其他編程語言)中,索引從零開始,而不是一個。

這意味着,如果尺寸是29,最後一個有效的指數是28,不是29

+0

我真的。我認爲這是錯誤的地方以x + 1或x喜歡說twain249下面 – Bulit 2012-03-10 00:39:42

+0

是的,這聽起來像特定問題。您需要確保'x + 1'不大於'getDzienTygodnia'內部訪問的任何內容的大小。 – 2012-03-10 00:46:10

+0

getDzienTygodnia =四月的天,所以應該是30 ///在這種情況下 – Bulit 2012-03-10 00:49:04

0

掰開引起例外,所以你可以清楚地看到哪些來電get失敗行。

boolean listaSwiatCheck = listaSwiat != null && listaSwiat.get(x) != null; 
if (listaSwiatCheck || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) { 
    c1.setBackgroundColor(BaseColor.RED); 
} 
現在