الجمعة، 13 سبتمبر 2013

دورة تعلم الجافا من الصفر (الاساسيات حتى الاحتراف) - الجزء السادس

نشر في :
2.7.NUMERIC DATA TYPES AND OPERATIONS



دلوقتي احنا عرفنا متغيرات من انواع مختلفة زي int, double طيب ايه الفرق بينهم ؟؟
الفرق الأساسي هو المساحة اللي بتتحجز من الذاكرة لكل نوع يعني اول ما بعرف متغير من نوع int مثلا بيتحجز ليه في الذاكرة مساحة غير المتغير من نوع double وهكذا..
الجافا فيها 8 انواع من المتغيرات وده جدول فيه النوع والمساحة اللي بتتحجز له وممكن يتمثل في كام bit



والجافا فيها 3 انواع من المتغيرات لو عايز تعرف عدد صحيح وهما : byte, short, int & long
ولو عايز تعرف عدد عشري او له كسور فيه نوعين : float & double وبيقول ان من الأحسن استخدام الـ double لأنه ادق من الـ float .





2.7.1. NUMERIC OPERATORS



السكشن ده بيتكلم عن علامات العمليات الحسابية زي اللي في الجدول ده : 





بيقول برده معلومة ان ناتج قسمة عددين صحيحين هيطلع عدد صحيح برده وجزء الكسر هيتحذف يعني مثلا 5/2 هتطلع 2 مش 2.5 
برده علامة الـ % ودي بتجيب باقي القسمة يعني لما بنيجي نقسم رقمين بالطريقة دي اللي علي الشمال بيبقي اسمه dividend واللي علي اليمين بيبقي اسمه divisor مثلا لو قولنا 7 % 3 هتكون النتيجة 1 يعني ناتج القمسة العادية 2 وهيتبقي 1 اهو هو ده الناتج.



ولو عملنا العملية دي علي ارقام سالبة الناتج بيطلع سالب فقط لو اللي علي الشمال سالب .
طبعا حكاية الباقي دي مفيدة جدا جدا في البرمجة يعني مثلا لو بعمل برنامج بيطلع الأعداد الزوجية او الفردية ممكن اعرف الأرقام بسهولة لإن الرقم الزوجي باقي قسمته علي 2 دايما بـ0 والفردي باقي قسمته دايما بـ 1 
وجايب مثال علي الحكاية دي بيقول لو احنا انهاردة السبت وانت واصحابك هتتقابلوا كمان 10 ايام وعايز اعرف هيبقي يوم ايه ؟؟ بسهولة اقدر احدد اليوم بالمعادلة دي:


طبعا ده ماشي علي نظام الأسبوع في اوروبا يعني اول يوم في الأسبوع عندهم بيبقي يوم الإثنين الفكرة انه قال انا دلوقتي في اليوم السادس ومعادي بعد 10 ايام جميل قوي هو قام جامعهم علي بعض وجاب باقي قسمتهم علي الأسبوع كله طلع 2 يعني المعاد هيبقي في اليوم التاني من الأسبوع اللي هو يوم الثلاثاء .
وده كمان مثال برنامج بيحسب عدد الدقائق والثواني في كمية من الزمن انا بدخله.


كود:
1 import javax.swing.JOptionPane; 2 3 public class DisplayTime { 4 public static void main(String[] args) { 5 int seconds = 500; 6 int minutes = seconds / 60; 7 int remainingSeconds = seconds % 60; 8 JOptionPane.showMessageDialog(null, 9 seconds + " seconds is " + minutes + 10 " minutes and " + remainingSeconds 11 + " seconds"); 12 } 13 }



هنا في البرنامج ده قسمنا عدد الثواني الكلي علي 60 بالقسمة العادية علشان اعرف عدد الدقائق وبعدين قسمتهم بطريق الباقي علشان اعرف عدد الثواني بعد ما شيلت منهم الدقائق.
بيقولنا ملاحظة ان اي عملية بتحصل علي اعداد عشرية مش بتطلع النتيجة كاملة ولكن بتطلع مقربة ولكن في العمليات علي الأعداد الصحيحة بتطلع النتيجة كاملة بدون اي تقريب.
بعد كده هيتكلم في السكشن اللي بعده عن مفهوم القيم وازاي بتتقري وتتخزن .




2.7.3. ARITHMATIC EXPRESSIONS


ازاي نكتب تعبير كامل في برنامجنا وازاي بيتحسب ؟؟؟؟


مثال زي ده لو حولناه لكود هيبقي شكله كده :

كود:
(3 + 4 * x) / 5 – 10 * (y - 5) * (a + b + c) / x +9 * (4 / x + (9 + x) / y)




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

مثال برنامج بيحول درجات الحرارة من الـفهرنهايت للسيليزويس ومعادلته هي:





كود:
Celsius =  5/9 (Fahrenheit – 32)

والبرنامج اهه :


كود:
1public class FahrenheitToCelsius 2 public static void main(String[] args) { 3 double fahrenheit = 100; // Say 100; 4 double celsius = (5.0 / 9) * (fahrenheit - 32); 5 System.out.println("Fahrenheit " + fahrenheit + " is " + 6 celsius + " in Celsius"); 7 } 8 }

وهنلاحظ في السطر الرابع اننا قولنا (5.0 / 9) علشان اجيب الناتج كقيمة عشرية مش عدد صحيح لو كان سابها (5/9) كان هيبقي الناتج 0







2.7.4. SHORTHAND OPERATORS


ممكن في الكود تقابلنا جملة زي دي :

كود:
i = i + 8;


وفيها بنجمع 8 علي قيمة المتغير i وبحط الناتج تاني في i
ممكن نختصر الجملة دي ونستخدم التعبير ده :

كود:
i += 8;


واسمه shorthand operator وفيه كمان زيه لكل العمليات زي كده:




وفيه كمان اتنين زيادة بنستخدمهم في زيادة المتغير بواحد او تنقيصه برده بقيمة واحد وقواعدها في الجدول ده :



لفرق بين وجود ++ قبل المتغير او بعده هو ان لما بتكون العلامة قبل المتغير ده معناه ان قيمته هتزيد الأول بواحد وبعدين تتم العملية المطلوبة علي القيمة الجديدة , اما لو العلامة بعد المتغير ده معناه ان العملية المطلوبة هتتم عليه الأول وبعدين قيمته هتزيد بواحد وكمثال للتوضيح:



هنا العملية تمت الاول وهي انه ضرب الـ i في 10 وبعدين زود علي الـ i واحد وهيكون الـ newNum = 100


لكن هنا زودنا الأول الـi بواحد وبعدين ضربنا القيمة الجديدة في 10 وهيكون الـ newNum = 110
بيقول نصيحة وهي عدم الإكثار من استخدام الطريقة دي في كتابة التعبيرات لأنها بتزود من صعوبة الكود.







2.8. NUMERIC TYPE CONVERSIONS



احيانا بنحتاج اننا نضم اكتر من نوع متغير في تعبير واحد زي كده:

كود:
byte i = 100; long k = i * 3 + 4; double d = i * 3.1 + k / 2;


بيقولنا قواعد عامة لمعاملة اي تعبير فيه اكتر من نوع من المتغيرات:




- لو كان فيه متغير من نوع double إذن كل المتغيرات يتحول نوعهم إلي double .

- لو مكانش بس فيه متغير من نوع float إذن كل المتغيرات يتحول نوعها إلي float

- لو مكانش بس فيه متغير من نوع long إذن كل المتغيرات يتحول نوعها إلي long

- لو مكانش يبقي المتغيرات كلها تبقي من نوع int .



يعني مثلا لو عندنا 1/2 هيبقي الناتج 0 لأن الرقمين int لكن لو كان1.0/2 هيبقي الناتج 0.5 لأن فيه رقم منهم double فهتتحول ال2 الي double وعندنا ترتيب الأنواع :







يعني بما معناه انا ممكن ادي قيمة لمتغير من نوع float واخليه int لكن العكس ماينفعش زي كده :


كود:
float f = (float)10.1; int i = (int)f;

وفي الحالة دي الجزء العشري هيتشال من القيمة.

وبيقول ملاحظة ماننساش لما اجي اعمل casting يعني لما اجي احول نوع متغير اراعي اني بحول من نوع اعلي لنوع اقل لكن العكس هيطلع error

بيقول كمان ملاحظة ان التحويل بطريقة الcasting مش بيغير نوع المتغير اللي بحوله هو بيغير قيمته بس في التعبير اللي بحول فيه .


وعامل برنامج كتطبيق علي الجزئية دي وهو برنامج بيحسب قيمة الضرائب برقمين عشريين:



كود:
 

1 public class SalesTax {
2 public static void main(String[] args) { 3 double purchaseAmount = 197.55; 4 double tax = purchaseAmount * 0.06; 5 System.out.println((int)(tax * 100) / 100.0);
6 }
7 }


وعندنا هنا المتغير اللي المفروض فيه القيمة اللي هحسبلها الضرائب هو purchaseAmount وقيمته 197.55 والمتغير tax وده بيحسب الضرائب بإنه بيضرب قيمة المبلغ في نسبة وهي 0.06 ولما جيت اطبع قيمة الضرائب المفروض تطلع بالمنظر ده 11.853 بس انا عاوز اطلع النتيجة بعد رقمين عشريين بس فاستخدم طريقة الcasting فعمل في السطر الخامس جملة casting لناتج ضرب قيمة الضرائب في 100 فطلعت 1185 قام قاسمها علي 100.0 يعني قيمة double فطلع الناتج في الأخر قيمة double وهي 11.85

ليست هناك تعليقات:

إرسال تعليق

جميع الحقوق محفوظة سيف شابسوغ ©2012-2013 | جميع المواد الواردة في هذا الموقع حقوقها محفوظة ، فهـرس الـموقــع | أتفاقية الأستخدام