البرمجة

تحسين أداء دوال العد وإزالة التكرار في البرمجة بلغة Java

في هذا السياق، يبدو أن الطريقة التي قمت بها بتنفيذ الدالتين CountRecur و RemoveRecur لديك لديها بعض القضايا التي يجب التفكير فيها. لنقم بتحليل الكود وتقديم بعض الإرشادات حول كيفية تحسين الأداء وضمان عمل الكود بشكل صحيح.

أولاً وقبل كل شيء، يبدو أنك تقوم بنسخ StrArr1 إلى StrArr2، ولكن هذا لا يؤدي إلى نتائج متوقعة. عندما تقول StrArr2 = StrArr1، فإنك تقوم بمجرد ربط المتغير StrArr2 بنفس الكائن الذي يشير إليه StrArr1، وليس نسخ القيمة. لذا أي تغيير في أحدهما سيؤثر على الآخر. بدلاً من ذلك، يفضل استخدام addAll لنسخ جميع العناصر إلى StrArr2 بشكل فعلي.

java
StrArr2.addAll(StrArr1);

ثانيًا، في دالة CountRecur، يوجد دورتين متداخلتين (for و while) ويبدو أن هناك خلل في تحديث قيمة count. يجب عليك ضبط حجم الحلقة الخارجية ليكون i < StrArr2.size() بدلاً من i <= StrArr2.size() لتجنب تجاوز الحجم الفعلي للقائمة. كما يجب أن يكون هناك تحقق من قيمة j لتجنب التجاوز لحجم StrArr1.

java
for (int i = 0; i < StrArr2.size(); i++) { if (count != 0) { IntArr.add(count); } count = 0; if (i < StrArr2.size()) { while (j < StrArr1.size() && StrArr2.get(i).equals(StrArr1.get(j))) { count++; j++; } } }

ثالثًا، في دالة RemoveRecur، يفضل استخدام حلقة for بدلاً من while لتحسين قراءة الكود وتجنب مشاكل الدوران غير المتوقعة.

java
public void RemoveRecur(ArrayList StrArr3) { for (int i = 1; i < StrArr3.size(); i++) { if (StrArr3.get(i).equals(StrArr3.get(i - 1))) { StrArr3.remove(i - 1); i = 0; } } }

وأخيرًا، يُفضل أيضًا استخدام أسماء معبرة لتسميات المتغيرات وتوثيق الكود بتعليقات لتسهيل فهمه للمطورين الآخرين، وذلك كجزء من مبدأ البرمجة النظيفة.

بتطبيق هذه الإصلاحات والتحسينات، يمكن أن تكون قادرًا على تحسين أداء وظيفة CountRecur وضمان عملها بشكل صحيح.

المزيد من المعلومات

بالطبع، دعونا نواصل مناقشة بعض الجوانب الأخرى في الكود ونقدم بعض الإرشادات لتحسينه.

  1. تحسين أداء RemoveRecur:
    يمكنك تحسين أداء دالة RemoveRecur باستخدام حلقة for مع الإبقاء على المتغير i في نطاق صحيح دون إعادة تهيئته.

    java
    public void RemoveRecur(ArrayList StrArr3) { for (int i = 1; i < StrArr3.size(); ) { if (StrArr3.get(i).equals(StrArr3.get(i - 1))) { StrArr3.remove(i - 1); } else { i++; } } }
  2. استخدام List لحفظ النتائج:
    بدلاً من استخدام IntArr لتخزين النتائج، يمكنك استخدام List لتحسين إدارة الذاكرة وتجنب حجم ثابت.

    java
    List result = new ArrayList<>(); // ... في دالة CountRecur result.add(count); // ... // يمكنك إعادة تعيين IntArr إلى result في نهاية الدالة إذا كان من الضروري.
  3. التحقق من الحد الأدنى لحجم القائمة:
    قبل الوصول إلى عناصر القائمة في دالة CountRecur، يمكنك التحقق من أن القائمة ليست فارغة لتجنب الأخطاء.

    java
    if (!StrArr2.isEmpty()) { // ... ابدأ الحلقة }
  4. التوثيق والتعليقات:
    لجعل الكود أكثر فهمًا للآخرين، يفضل إضافة توثيق للدوال وتعليقات توضيحية للأجزاء الرئيسية من الكود.

    java
    /** * تقوم بإزالة العناصر المتكررة من القائمة. * @param StrArr3 القائمة المستهدفة للتعديل. */ public void RemoveRecur(ArrayList StrArr3) { // ... الكود } /** * تقوم بعد الإزالة بعدد المرات التكرار لكل عنصر وإضافتها إلى قائمة النتائج. */ public void CountRecur() { // ... الكود }

باستخدام هذه الإرشادات، يمكنك تحسين الأداء والقراءة والصيانة العامة للكود.

زر الذهاب إلى الأعلى