البرمجة

حل مشكلة طباعة القيمة الأخيرة فقط في برنامج الانتخابات باستخدام Java

عند تحليل الشيفرة التي قدمتها، يظهر أن المشكلة الرئيسية تكمن في استخدام الحقول الثابتة (static) في فئة Candidate. عندما تكون الحقول static، فإنها تشترك بين جميع الكائنات من نفس الفئة، مما يؤدي إلى تأثير غير متوقع عند إنشاء كائنات فرعية من Candidate في مثيل TestCandidate.

لحل هذه المشكلة، يجب إزالة كلمة “static” من تعريف الحقول في فئة Candidate، بحيث تصبح الفئة كالتالي:

java
public class Candidate { private String name; private int numVotes; Candidate(String name, int numVotes) { this.name = name; this.numVotes = numVotes; } // ... باقي الشيفرة }

بعد هذا التغيير، ستتمكن من إنشاء كائنات فرعية من Candidate بشكل صحيح، وستظهر النتائج كما هو متوقع.

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

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

  1. تعديل مراقبة الحلقة في getTotal :
    في الوقت الحالي، تستخدم حلقة for-each للتجميع على جميع الأصوات. ومع ذلك، يجب عليك استخدام الكائن i في كل تكرار بدلاً من استخدام الفئة Candidate مباشرة. هذا يعني تحسين دورة getTotal كما يلي:

    java
    public static int getTotal(Candidate[] election) { int total = 0; for (Candidate candidate : election) { total += candidate.getVotes(); } return total; }
  2. تعديل دورة printResults:
    في دورة printResults، تستخدم مرة أخرى الفئة Candidate بدلاً من استخدام الكائن i. يجب تصحيح هذا لضمان طباعة نتائج صحيحة لكل مرشح. هنا التعديل المقترح:

    java
    public static void printResults(Candidate[] election) { System.out.printf("%s%12s%25s", "Candidate", "Votes", "Percentage of Votes\n"); for (Candidate candidate : election) { System.out.printf("\n%s%10s%10s", candidate.getName(), candidate.getVotes(), ((double) candidate.getVotes() / getTotal(election) * 100)); } System.out.println("\n\nTotal Number of Votes: " + getTotal(election)); }
  3. تعديل دورة addCandidates:
    في دورة addCandidates، يمكنك تحسينها لتقوم بتهيئة الكائنات داخل الفئة TestCandidate بدلاً من تمرير المصفوفة كمعامل. هذا يجعل الشيفرة أكثر قابلية للصيانة والفهم.

    java
    public class TestCandidate { public static Candidate[] election = new Candidate[5]; static { election[0] = new Candidate("John Smith", 5000); election[1] = new Candidate("Mary Miller", 4000); election[2] = new Candidate("Michael Duffy", 6000); election[3] = new Candidate("Tim Robinson", 2500); election[4] = new Candidate("Joe Ashton", 1800); } // باقي الشيفرة }

هذه التحسينات يمكن أن تساعد في جعل البرنامج أكثر وضوحًا وسهولة في الصيانة.

مقالات ذات صلة

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

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر