الدرس 2 من 10
الأنواع والتحويل
- 12 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
القسمة الصحيحة و long و Math.round
الشرح
كل متغيّر في Java يُعلَن بنوعه، ولا يتغيّر نوعه بعدها: int للعدد الصحيح، وdouble للعشري، وboolean لـ true أو false، وchar لحرف واحد بين علامتين مفردتين مثل 'A'، وString للنصّ بين مزدوجتين. وint يقف عند نحو 2.1 مليار، فما فوقه يحتاج long، ويُختم ثابته بـ L: 3_000_000_000L.
والفخّ الأول: القسمة بين عددين صحيحين تبقى صحيحة وتُسقط الكسر. 47 / 6 تساوي 7، وإسنادها إلى double لا يعيد الكسر، لأنه ضاع قبل الإسناد. حوّل أحد الطرفين قبل القسمة: (double) kills / deaths. والفخّ نفسه في الضرب: players * xpEach تفيض داخل int فتنقلب سالبة قبل أن تصل إلى long، فاكتب (long) players * xpEach.
و(int) 30.83 تقطع الكسر فتعطي 30، أما Math.round(30.83) فتقرّب إلى 31، لكنها تُرجع long، وJava لا تضيّق النوع من تلقاء نفسها، فاكتب (int) Math.round(x). وللتقريب إلى منزلتين: Math.round(x * 100) / 100.0، و.0 هنا ضرورية وإلا عادت القسمة صحيحة.
المطلوب
شغّل الكود وانظر إلى الرقمين، ثم أصلح الدوال الثلاث: kdRatio(kills, deaths) تُرجع النسبة عشريةً مقرّبة إلى منزلتين (47 و6 تعطيان 7.83)، وtotalXp(players, xpEach) تُرجع المجموع بلا فيضان، وhealthPercent(hp, maxHp) تُرجع النسبة المئوية مقرّبة إلى أقرب عدد صحيح (37 من 120 تعطي 31 لا 30).
معايير التصحيح
5 معايير- kdRatio(47, 6) تساوي 7.83
- kdRatio لا تُسقط الكسر
- totalXp بلا فيضان: ثلاثة مليارات
- healthPercent تقرّب ولا تقطع: 37 من 120 تعطي 31
- طُبع: K/D: 7.83 ومجموع الخبرة 3000000000