سؤال

حصلت مشكلة صغيرة حصلت على خطأ جافا.لانج.إندكسوتوفبوندسيكسسيبتيون:الفهرس: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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top