تمرينات

تمرين 14.1
إن الغرض من هذا التمرين هو تطبيق خوارزميات الخلط والترتيب الموجودة في هذا الفصل.
a. نزل شفرة هذا الفصل من http://thinkapjava.com/code/Card2.java. واستوردها إلى بيئة البرمجة عندك. لقد كتبت مخططات أولية للعمليات، لذلك يفترض أن تقدر على تجميع البرنامج. لكن عند تشغيله سيطبع رسائل تبين أن العمليات الفارغة لا تعمل بكل صحيح. عندما تملأ الفراغات في تلك العمليات بشكل صحيح، يجب أن تختفي تلك الرسائل.
b. إذا قمت بحل التمرين 12.4، فلا بد أنك كتبت العملية randomInt. إذا لم يكن ذلك ما حصل، اكتبها الآن وأضف بعض الشفرة لاختبارها.
c. اكتب عم لية باسم swapCards تأخذ مجموعة ورق (مصفوفة أوراق) ودليلين، وتبدل بين الورقتين الموجودتين في هذين الموقعين.
مساعدة: يجب أن تبدل المرجعيات وليس محتويات الكائنين. هذا أسرع؛ كما أنها تعالج القضية بشكل صحيح عندما تملك الأوراق أسماء مستعارة.
d. اكتب عملية باسم shuffleDeck تستخدم الخوارزمية من القسم 14.2. قد ترغب باستخدام عملية randomInt من التمرين 12.4.
e. اكتب عملية باسم indexLowestCard تستخدم العملية compareCard لإيجاد الورقة الأدنى في مجال معطى من مجموعة الورق (من lowIndex حتى highIndex، حيث ينتمي كل منها إلى المجال).
f. اكتب عملية باسم sortDeck ترتب مجموعة أوراق من الأدنى إلى الأعلى.
g. بالاستفادة من الشفرة الزائفة في القسم 14.6، اكتب العملية merge. تأكد من اختبارها قبل محاولة استخدامها كجزء من mergeSort.
h. اكتب النسخة المبسطة من mergeSort، تلك التي تقسم مجموعة الورق إلى نصفين، وتستخدم sortDeck لترتيب النصفين، وتستخدم merge لإنشاء مجموعة جديدة، مرتبة بالكامل.
i. اكتب نسخة تعاودية بالكامل من العملية mergeSort. تذكر أن sortDeck عملية تعديل وأن mergeSort تابع، ما يعني أن استدعاءهما يتم بشكل مختلف:
كود:
sortDeck(deck);       // modifies existing deck
deck = mergeSort(deck);    // replaces old deck with new