/Java Programming: Let’s Master 2

Java Programming: Let’s Master 2

 

إحنا في شابتر 1 اتكلمنا عن حاجات عامة أوي في الجافا،، زي علاقة الجافا بالويب مثلا أو بتطبيقات الموبيل،، و دا كان بهدف التعرف على امكانيات اللغة،، و اتكلمنا عن ازاي بكتب كود بطريقة مبدأية أوي..النهاردا هنتعرف على الجافا بس بإسقاط الضوء اكتر عليها و هنقول ازاي بندأ نحترف اللغة دي..

2.2. WRITING SIMPLE PROGRAMS

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

في الاول كده عايزين نعرف يعني ايه algorithm ؟؟

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

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

-1- الأول هقري نصف القطر سواء هدخله انا او الuser هو اللي هيدخله.

-2- هنحسب مساحة الدائرة من المعادلة: area= radius * radius * pi اللي هي بالعربي: ط نق2 والـ radius هو ده نصف القطر.

-3- هطبع المساحة.

 

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

وبيعرفنا علي مصطلح جديد Data Structures ودي طريقة لتحليل وتمثيل البيانات. الجافا عندنا فيها اكتر من نوع لتمثيل البيانات زي ال int, float, double ودول اسمهم الـ Primitive data types وفيه برده انواع من الـ objects زي الـ array & string وفيه حاجات تانية زي الـ stack & linked lists ودول معمولين جاهزين في الجافا.

جميل جدا جدا دلوقتي هنبدأ نفكر ازاي نعمل البرنامج ده بقي؟؟؟

الاول كده احنا عرفنا ان اي برنامج جافا لازم يكون فيه كلاس فالكلاس بتاعنا هنسميه ComputeArea.

public class ComputeArea {
// Data and methods to be given later
}

وبرده عارفين ان لازم نعمل الـ main method :

public class ComputeArea {
public static void main(String[] args) {
// Step 1: Read in radius
// Step 2: Compute area
// Step 3: Display the area
}
}

طيب دلوقتي احنا عملنا الكلاس والمين ميثود فاضل بقي نعمل المطلوب من البرنامج وهنا عملنا comment بالخطوات اللي المفروض اعملها في البرنامج.

اولا ازاي هقري نص القطر من الـ user ؟

ثانيا هخزنه ازاي واتعامل معاه ازاي؟

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

public class ComputeArea {
public static void main(String[] args) {
double radius;
double area;
// Step 1: Read in radius
// Step 2: Compute area
// Step 3: Display the area
}
}

وعرفتهم من نوع double لأنهم فيهم كسور طبعا .

نيجي لأول مشكلة كانت عندنا وهي ازاي هقري قيمة نصف القطر ؟

احنا مبدأيا هندخلها احنا قيمة ثابتة وبعد كده هنبقي نخلي الuser هو اللي يدخلها :

لو جينا نحلل البرنامج ده هنلاقيه الاول دخل قيمة نصف القطر بـ 20 وبعد كده عمل المعادلة المطلوبة واستعوضنا عن radius2 بإننا خليناها radius * radius وبعد كده جملة الطباعة طبعنا الاول جملة عادية وهي “The area for the circle of radius” وبعدين طبعنا قيمة نصف القطر واستخدمنا في الربط بين الجملة اللي انا كاتباها والقيمة اللي راجعالي من البرنامج بــ (+) وعلامة الجمع دي بنستخدمها في حالتين إما في عملية جمع عادية او في عملية دمج اكتر من String جنب بعض زي عندنا كده مادمج بين الجملة اللي انا كتبتها وبين قيمة نصف القطر واستخدمته تاني لما جيت اربط بين قيمة نصف القطر وكلمة “is” ويعدين تاني بين كلمة “is” وبين قيمة المساحة وفي الأخر طبعت كل ده بإستخدام امر الطباعة اللي عرفناه System.out.println .

 

خطأ شائع:

1- ممكن وانت بتكتب متحطش ال (+) في المكان اللي المفروض تكون فيه وفي الحالة دي هيطلع error زي:

System.out.println(“Introduction to Java Programming,
by Y. Daniel Liang”+)

وممكن نعالج الerror ده عن طريق تعديل مكانها زي كده:

System.out.println(“Introduction to Java Programming, ” +
“by Y. Daniel Liang”);

2.3. IDENTIFIERS

لما جينا عملنا المتغير بتاع نصف القطر اخترنا له اسم طيب هو حكاية اسامي المتغيرات والـ methods دي محكومة لقواعد ولا اي حاجة تنفع؟؟؟

هنقول انها محكومة لقواعد وهي ان اسم المتغير لازم :

-1- ميكونش كلمة من الكلمات المحفوظة زي public, void, main, static .

-2- ممكن يكون اي مجموعة حروف وحروف خاصة كمان زي ($), (_) .

-3- مينفعش اسم المتغير يبدأ برقم او يكون عملية حسابية بيحصل فيها معالجة.

-4- مينفعش يكون true , false or null .

-5- ممكن يكون اي طول مش مشكلة طوله.

امثلة علي اسامي متغيرات وميثودس صحيحة : $2, ComputeArea, area, radius, and showMessageDialog .

امثلة علي اسامي متغيرات وميثودس غلط : 2A and d+4

ملاحظة : بما إن الجافا case sensitive يعني بتفرق بين الحروف الكابتل والسمول فهنلاقي ان المتغير اللي اسمه X غير المتغير اللي اسمه x .

نصيحة : لما تيجي تسمي متغير اختار اسم له معني في البرنامج علشان تسهل قراية الكود علي نفسك وعلي غيرك. وبرده لا يفضل انك تسمي متغير بـ $ .

2.4. VARIABLES

عنوان السيكشن بيقول المتغيرات

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

 

مثال :

// Compute the first area
radius = 1.0; area = radius * radius * 3.14159;
System.out.println(“The area is ” + area + ” for radius ” + radius);
// Compute the second area
radius = 2.0;
area = radius * radius * 3.14159;
System.out.println(“The area is ” + area + ” for radius ” + radius);

طيب اعمل ازاي متغير ؟؟

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

datatype variableName;

الأول بعرف نوع المتغير وبعدين اسمه وبنهي الجملة بــ (;)

امثلة علي اسامي متغيرات :

int x;               // Declare x to be an integer variable;
double radius;       // Declare radius to be a double variable;
double interestRate; // Declare interestRate to be a double variable;
char a;              // Declare a to be a character variable;

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

int i, j, k; // Declare i, j, and k as int variables

ملاحظة :: برده ان المتعارف عليه ان اسامي المتغيرات بتبدأ بحرف سمول lower case ولو من كلمتين يبقي الكلمة التانية تبتدي بكابتل زي interestRate .

2.5. ASSIGNMENTS, STATEMENTS & ASSIGNMENT EXPRESSIONS

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

int x = 1;               // Assign 1 to variable x;
double radius = 1.0;     // Assign 1.0 to variable radius;
x = 5 * (3 / 2) + 3 * 2; // Assign the value of the expression to x;
x = y + 1;               // Assign the addition of y and 1 to x;
area = radius * radius * 3.14159; // Compute area

ممكن كمان نستخدم المتغير في عملية ونحطه تاني في نفس المتغير او في متغير تاني :

x = x + 1;

في الجملة دي جمعت علي x واحد وحطيته تاني في x يعني لو كان x قبل الجملة دي بـ 1 هيبقي بعدها بـ 2 .

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

1=x;

هيبقي غلط.

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

System.out.println(x = 1);

ودي بتتساوي مع نفس الجمل دي :

x = 1;
System.out.println(x);

وبرده لو كتبت كده يعتبر صح :

i = j = k = 1;

ودي بتتساوي مع :

k = 1;
j = k;
i = j;

ملاحظة: كويسة جدا لو عرفت متغير علي انه int مينفعش احط فيه قيمة فيها كسر عشري لأن نوعه عدد صحيح فكده هيبقي غلط بس ممكن اعمل casting واخليه يقبل القيمة دي ولكن ده موضوع لسه هيتشرح قدام شوية.

 

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

int x = 1;

ودي مساوية بالظبط للي كان بنعمله قبل كده :

int x;
x = 1;

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

2.6. CONSTANTS

طيب دلوقتي انا عملت متغير وانا عارف ان قيمته ممكن تتغير طول البرنامج طيب لو انا عايز اعمل متغير قيمته ثابته مش عايزها تتغير طول البرنامج ممكن اعرف متغير علي انه ثابت زي كده :

final datatype CONSTANTNAME = VALUE;

وانا بعمل المتغير الثابت ده لازم اعرفه واديله قيمة في الاول وكلمة final دي كلمة محفوظة معناها ان المتغير ده قيمته ثابتة ومش هتتغير طول البرنامج.

// ComputeArea.java: Compute the area of a circle
public class ComputeArea {
/** Main method */
public static void main(String[] args) {
final double PI = 3.14159; // Declare a constant
// Assign a radius
double radius = 20;
// Compute area
double area = radius * radius * PI;
// Display results
System.out.println(“The area for the circle of radius ” +
radius + ” is ” + area);
}
}

ملحوظة: المتعارف عليه ان اسم المتغير الثابت بيبقي كابتل زي PI مش pi او Pi .

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

1- مش محتاج كل شوية تغير قيمته في البرنامج .

2- القيمة بحطها مرة واحدة في مكان واحد .

3- اني اختار اسم مناسب للمتغير هيسهلي عملية قراية الكود .

 

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.2. 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.3. 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

ياريت ياجماعة نطبق البرامج دي لأن الاهم من القراية والفهم هو التطبيق

2.9. Character Data Type and Operations

في السكشن ده بنتعرف علي نوع من المتغيرات وهو الـ char وبيقولنا انه بيستخدم لتمثيل حرف واحد فقط وبتكون قيمته بين ‘-‘ ومثال عليه :

char letter = ‘A’;
char numChar = ‘4’;

في المثال الأول حط الحرف A في المتغير اللي اسمه letter وفي المثال التاني حط الرقم 4 ولكن كحرف في المتغير numChar .

ملاحظة : القيمة اللي بحطها في المتغير من نوع char لازم تكون بين single quote لو حطيتها بين double quote هتبقي string وليست char يعني “A” نوعه string ولكن ‘A’ نوعه char .

2.9.1. Unicode and ASCII Code

في السكشن ده بيعرفنا الحرف بيتقري ازاي ولقراية وتخزين الحروف عندنا نوعين من الكود :unicode & ASCII والجافا بتدعم الunicode وبيكون كود الحروف من اول ‘\u0000’ لحد ‘\uFFFF’

وبتكون الحروف مكتوبة بالhexadecimal وده مثال علي طريقة كتابة وقراية الحروف:

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

char letter = ‘A’;
char letter = ‘\u0041’; // Character A’s Unicode is 0041

ملاحظة : طريقة التزويد والتنقيص increment & de

increment ممكن تطبق علي ال  char زيه بالظبط زي المتمغيرات العادية وده مثال هيطبع حرف الb:

char ch = ‘a’;
System.out.println(++ch);

2.9.2. Escape Sequences for Special Characters

احيانا وانا شغال ببقي عايز اني اطبع الناتج ولكن بعد عدد معين من السطور بإستخدام الـtab او اني اسيب سطر , الجافا بتوفر الخاصية دي عن طريق انها عملت حروف خاصة للمهام دي بتكون مسبوقة بعلامة (\) زي اللي في الجدول كده:

افرض مثلا انك عايز تطبع الجملة دي:

He said “Java is fun”

هنعملها كده:

System.out.println(“He said \”Java is fun\””);

2.9.3. Casting Between char and Numeric Types

طبعا نقدر نحول المتغير من نوع الchar لأي نوع تاني مفيش اي مشكلة يعني مثلا هنا:

char c = (char)0XAB0041; // the lower 16 bits hex code 0041 is
// assigned to c
System.out.println(c);   // c is character A

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

char c = (char)65.25;   // decimal 65 is assigned to t
System.out.println(c);  // c is character A

ونفس الحكاية لما اجي احول من char لأي نوع تاني زي كده مثلا:

int i = (int)‘A’;       // the Unicode of character A is assigned to i
System.out.println(i);  // i is 65

ملاحظة: عند تحويل قيمة من نوع char بتتحول لرقم اوتوماتك لو كان القيم الأخري ارقام او حروف ولو موجودة مع string بتنضاف عليه زي ماهي يعني بيحصل دمج مش اكتر زي المثال ده:

int i = ‘2’ + ‘3’; // (int)’2′ is 50 and (int)’3′ is 51
System.out.println(i is “ + i);
int j = 2 + ‘a’; // (int)’a’ is 97
System.out.println(“j is “ + j);
System.out.println(j + ” is the Unicode for character “ + (char)j);
System.out.println(“Chapter” + ‘2’);

display::::
i is 101
j is 99
99 is the Unicode for characterc
capter2

2.10. The String Type

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

String message = “Welcome to Java”;

ولكن الstring مش زي كل الانواع لأنه مربوط بclass زيه زي الJOptionPane يعني الstring مايعتبرش من الأنواع الجاهزة زي ال int, double يعني مايعتبرش primitive type ولكن هو يعتبر reference type معني الكلام ده هيوضح قدام اللي يهمنا دلوقتي هو ازاي اعمل متغير من نوع string وازاي احط فيه قيمة او ادمج اتنين string مع بعض ودي امثلة عليه :

// Three strings are concatenated
String message = “Welcome” + “to” + “Java”;
// String Chapter is concatenated with number 2
String s = “Chapter” + 2; // s becomes Chapter2
// String Supplement is concatenated with character B
String s1 = “Supplement” + ‘B’; // s becomes SupplementB

وكمان ممكن استخدم معاه كود الإختصار ده += يعني لو عندنا String فيه قيمة “Welcome to java” واسمه مثلا message   لو قولت كده:

message += ” and Java is fun”;

هيكون الناتج كده :

“Welcome to Java and Java is fun”

بيقول مثال لو عندنا i=1 و j=2 هيبقي ايه ناتج الجملة دي???

System.out.println(“i + j is “ + i + j);

اللي هيحصل انه هيطبع “i+j is ” وبعد كده هيطبع قيمة i وبعد كده قيمة j اللي هي 12 يعني هيبقي الناتج :

i + j is 12

ولو عايز اطبع قيمة الجمع بين i و j يبقي هحطهم بين اقواس زي كده:

System.out.println(“i + j is “ +( i + j));

2.11. Getting Input from Input Dialogs

جميل قوي لحد كده طيب في برنامج مساحة الدائرة كنا بندخل قيمة نصف القطر من البرنامج طيب لو حبيت اني اغير القيمة هدخل تاني للبرنامج واعدل في الكود طيب مافيه طريقة اسهل وهي اني ادخل القيمة من input dialogue وده موجود في ال JOptionPane في الميثود اللي اسمها showInputDialog .

هنكتب البرنامج عادي زي ماكتبناه قبل كده الجزء اللي هيتعدل بس هيبقي الجزء ده :

اول جملة null بتخلي الرسالة تطلع في وسط الشاشة وبعدين الجملة اللي هتخلي الuser يدخل القيمة “Enter an input” وبعد كده عنوان الdialog وبعد كده JOptionPane.QUESTION_MESSAGE علشان يعرض منظر علامة الإستفهام .

2.11.1. Converting Strings to Numbers

في برنامج زي اللي فات ده لو المفروض اني ادخل رقم هيتقري علي انه حرف مش رقم طيب الحل للمشكلة دي ايه ؟؟؟ الحل اني اخد القيمة اللي بدخلها دي واحولها لرقم يعني لو عندنا string اسمه intString وعايز  احوله لرقم int هيبقي كده :

int intValue = Integer.parseInt(intString);

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

double doubleValue = Double.parseDouble(doubleString);

وبعد كده فيه برنامجين كـ case study كتطبيق علي كل اللي فات.

دا تطبيق يا جماعة على كل اللي فات

دا برنامج المفروض بيحسب قيمة قرض،، اليوزر بيدخل قيمة القرض و مدة السداد و الفايدة السنوية،، والبرنامج دا بيحسب الدفع الشهري والدفع الكلي بعد الفايدة

import javax.swing.JOptionPane;

public class ComputeLoan {
/** Main method */
public static void main(String[] args) {
// Enter yearly interest rate
String annualInterestRateString = JOptionPane.showInputDialog(
“Enter yearly interest rate, for example 8.25:”);
// Convert string to double
double annualInterestRate =
Double.parseDouble(annualInterestRateString);
// Obtain monthly interest rate
double monthlyInterestRate = annualInterestRate / 1200;
// Enter number of years
String numberOfYearsString = JOptionPane.showInputDialog(
“Enter number of years as an integer, \nfor example 5:”);
// Convert string to int
int numberOfYears = Integer.parseInt(numberOfYearsString);
// Enter loan amount
String loanString = JOptionPane.showInputDialog(
“Enter loan amount, for example 120000.95:”);
// Convert string to double
double loanAmount = Double.parseDouble(loanString);
// Calculate payment
double monthlyPayment = loanAmount * monthlyInterestRate / (1
– 1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12));
double totalPayment = monthlyPayment * numberOfYears * 12;
// Format to keep two digits after the decimal point
monthlyPayment = (int)(monthlyPayment * 100) / 100.0;
totalPayment = (int)(totalPayment * 100) / 100.0;
// Display results
String output = “The monthly payment is ” + monthlyPayment +
“\nThe total payment is ” + totalPayment;
JOptionPane.showMessageDialog(null, output);
}

}

أي استفسار يا انا موجود يا جماااااعة

دا كان شابتر 2 من مرجع الجافا الأول المحبب لقلبي

Introduction to Java Programming 6th Edition

باي بااااااي ومعادنا العدد الجاي 🙂