【问题标题】:IndexOutofBoundException why?IndexOutofBoundException 为什么?
【发布时间】:2012-03-10 00:26:53
【问题描述】:

我遇到了一个小问题,我收到错误 java.lang.IndexOutOfBoundsException: Index: 29, Size: 29 当我启动这个代码错误是在行 if ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) 但不知道为什么 index 应该是 30 而不是 29 any1 可以帮助吗?

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);
                }

【问题讨论】:

    标签: java itext indexoutofboundsexception


    【解决方案1】:

    在 Java(和许多其他编程语言)中,索引从零开始,而不是一。

    这意味着,如果大小为 29,则最后一个有效索引是 28,而不是 29。

    【讨论】:

    • 我真的是这样。我认为 x+1 或 x 某处有错误,如下面所说的 twain249
    • 是的,这听起来像是具体问题。您需要确保x + 1 的大小不大于...在getDzienTygodnia 内部访问的任何内容。
    • getDzienTygodnia = 4 月的天数,所以应该是 30 ///在这种情况下
    • 使用调试器查看是否确实如此。提示:可能不是。
    【解决方案2】:

    看起来您正在遍历harm.get(y).dni 的所有元素,并且在循环内您 做

    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 处获得了超出范围的元素,因为与其他答案一样,索引从 0 而不是 1 开始。您必须在此处添加检查以查看您当前是否位于最后一个索引处,然后再检查下一个索引。

    【讨论】:

      【解决方案3】:

      拆分导致异常的行,这样您就可以准确地看到对get 的调用失败了。

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

      【讨论】:

        猜你喜欢
        • 2015-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        • 2016-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多