الدرس 2 من 10

الأنواع والتحويل

هدف الدرس

القسمة الصحيحة وlong وMath.round

01

الشرح

تحدّد في 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 من تلقاء نفسها، فاكتب (int) Math.round(x). وللتقريب إلى منزلتين اكتب Math.round(x * 100) / 100.0، ولا تحذف .0 هنا، وإلا صارت القسمة صحيحة من جديد.

02

المطلوب

شغّل الكود وانظر إلى الرقمين، ثم أصلح الدوال الثلاث، فاجعل kdRatio(kills, deaths) تُرجع النسبة عددًا عشريًّا مقرّبًا إلى منزلتين، فالرقمان 47 و6 يعطيان 7.83، واجعل totalXp(players, xpEach) تُرجع المجموع دون أن يتجاوز حدّ النوع، وhealthPercent(hp, maxHp) تُرجع النسبة المئوية مقرّبة إلى أقرب عدد صحيح، فـ 37 من 120 تعطي 31 وليس 30.

الفحوص

5 فحوص
  1. ناتج kdRatio(47, 6) يساوي 7.83
  2. الدالة kdRatio لا تحذف الكسر
  3. الدالة totalXp تصل إلى ثلاثة مليارات دون أن تتجاوز الحدّ
  4. الدالة healthPercent تقرّب ولا تحذف الكسر، فـ 37 من 120 تعطي 31
  5. طُبعت النسبة K/D: 7.83 ومجموع الخبرة 3000000000
03

تلميحات

0/3
Main.java
المخرجاتJava 13 (Judge0)

يُترجَم كودك الآن ويُشغَّل على الخادم.

–/5

يُترجَم كودك الآن ويُشغَّل على الخادم.

تجد 5 فحوص في بطاقة «المطلوب».