IndexOutofBoundException 为什么?
-
10-12-2019 - |
题
我遇到了一个小问题,我收到错误 java.lang.IndexOutOfBoundsException:指数:29、尺寸:29 当我启动这个代码时,错误是一致的 if ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd"))
但不知道为什么索引应该是 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);
}
解决方案
看起来您正在循环绕过所有损害的元素。
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 开始。您必须在此处添加一个检查,以查看当前是否位于最后一个索引,然后再检查下一个索引。
其他提示
在 Java(以及许多其他编程语言)中,索引从零开始,而不是从一开始。
这意味着,如果大小为 29,则最后一个有效索引为 28,而不是 29。
分解导致异常的行,以便您可以准确地看到哪个调用 get
正在失败。
boolean listaSwiatCheck = listaSwiat != null && listaSwiat.get(x) != null;
if (listaSwiatCheck || harm.get(y).getDzienTygodnia(x + 1).equals("Nd")) {
c1.setBackgroundColor(BaseColor.RED);
}
不隶属于 StackOverflow