إندكسوتوفبوندكسيبتيون لماذا?
-
10-12-2019 - |
سؤال
حصلت مشكلة صغيرة حصلت على خطأ جافا.لانج.إندكسوتوفبوندسيكسسيبتيون:الفهرس:29 ، الحجم:29 عندما أقوم بتشغيل هذا الخطأ رمز واحد في خط if ((listaSwiat != null && listaSwiat.get(x) != null) || harm.get(y).getDzienTygodnia(x + 1).equals("Nd"))
لكن دونو لماذا يجب أن يكون المؤشر 30 ليس 29 أي 1 يمكن أن تساعد?
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"))
آخر مرة من خلال حلقة س = 28 وحجم 29.لكنك تفعل
harm.get(y).getDzienTygodnia(x + 1)
حتى تحصل على العنصر في بقعة 29 وهو خارج الحدود ، لأنه مثل الإجابة الأخرى المذكورة يبدأ الفهرس في 0 وليس 1.يجب عليك إضافة شيك هنا لمعرفة ما إذا كنت حاليا في الفهرس الأخير قبل التحقق من الفهرس التالي.
نصائح أخرى
في جافا (والعديد من لغات البرمجة الأخرى) ، تبدأ المؤشرات من الصفر ، وليس واحدة.
هذا يعني أنه إذا كان الحجم 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);
}