سؤال

حصلت على الرمز التالي في تطبيق Android-App:

Event[] events = retrieveEvents();
if (events != null && events.length>0) {
   int eventNr = getFromUserInput();
   eventNr = eventNr % events.length;
   Event event = events[eventNr];
}

RetrieveEvents () يحصل على بعض EventS من الإنترنت ، بحيث يمكن أن يفشل على الرغم من أن يكون فارغًا أو null. يمكن للمستخدم تحديد أي Event للعرض ، لتجنب الاستثناء ، أستخدم عملية Modulo لضمان ملف eventNr هو داخل الحدود. هذا يعمل بشكل جيد على أي أجهزة اختبرتها ولكن:

أحصل على تقارير الأخطاء من مستخدمين آخرين حيث يرمي السطر الأخير الثاني (الوصول إلى الصفيف) ArrayIndexOutOfBoundsException. كيف يمكن أن يحدث هذا؟ ما هي الحالة التي تركتها دون رادع؟ أين خطأي؟

تذكر retrieveEvents() و ال getFromUserInput() يمكن أن تُرجع الوظيفة كلاهما بيانات غير صالحة ، لكنني أعتقد أنني راجعت كل حالة ، فأين خطأي؟

هل كانت مفيدة؟

المحلول

هل تأكد من ذلك eventNr ليس سلبيا أبدا؟ الشيك ليس في الرمز المقتبس. المشكلة هي أنه إذا ، على سبيل المثال ، eventNr هو -1 و events.length هو 5 ، -1 % 5 = -1 وبالطبع events[-1] خارج الحدود.

نصائح أخرى

هل هذا تطبيق خيوط؟ هل من الممكن أن تعيد RetrieveEvents () دائمًا إشارة إلى نفس الصفيف ، ولكن يتم تعديل الصفيف في الوقت الفعلي؟ إذا كان الأمر كذلك ، فقد تكون هذه مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top