المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : برنامج جافا بسيط تطبيق و إضافة



الشريف أحمد
08-19-2009, 02:26 PM
السلام عليكم

السلام عليكم و رحمة الله و بركاته

قمت بتطبيق برنامج من كتاب Introduction.to.Java.Programming.Comprehensive.Ver sion.6th.Edition

أول مرة كنت أنظر للمثال كثيرا ..
هذه المرة كتبته بمفردى بعد أن تركت القراءة فى الكتاب و فى الجافا مدة تزيد عن أسبوعين..
فكتبت و أضفت و تعبت من كتر التفكير ^_^ " البرمجة ديه متعبة "

ده المثال فى الكتاب

الأرقام موجودة فى الكتاب أنا أخذته كوبى من الكتاب


1 import javax.swing.JOptionPane;
2
3 public class SubtractionTutorLoop {
4 public static void main(String[] args) {
5 int correctCount = 0; // Count the number of correct answers
6 int count = 0; // Count the number of questions
7 long startTime = System.currentTimeMillis();
8 String output = "";
9
10 while (count < 10) {
11 // 1. Generate two random single-digit integers
12 int number1 = (int)(Math.random() * 10);
13 int number2 = (int)(Math.random() * 10);
14
15 // 2. If number1 < number2, swap number1 with number2
16 if (number1 < number2) {
17 int temp = number1;
18 number1 = number2;
19 number2 = temp;
20 }
21
22 // 3. Prompt the student to answer "what is number1 – number2?"
23 String answerString = JOptionPane.showInputDialog
24 ("What is " + number1 + " - " + number2 + "?");
25 int answer = Integer.parseInt(answerString);
26
27 // 4. Grade the answer and display the result
28 String replyString;
29 if (number1 - number2 == answer) {
30 replyString = "You are correct!";
31 correctCount++;
32 }
33 else
34 replyString = "Your answer is wrong.\n" + number1 + " - "
35 + number2 + " should be " + (number1 - number2);
36 JOptionPane.showMessageDialog(null, replyString);
37
38 // Increase the count
39 count++;
40
41 output += "\n" + number1 + "-" + number2 + "=" + answerString +
42 ((number1 - number2 == answer) ? " correct" : " wrong");
43 }
44
45 long endTime = System.currentTimeMillis();
46 long testTime = endTime - startTime;
47
48 JOptionPane.showMessageDialog(null,
49 "Correct count is " + correctCount + "\nTest time is " +
50 testTime / 1000 + " seconds\n" + output);
51 }
52 }
http://www.copypastecode.com/9205/


لو وضعت فيه حروف يفشل أو لو تركت الخانة فارغة يفشل أيضا
بعد الأستفسار عرفت دالة String.matches و إستخدمتها و جعلت البريمج يطلب عدد المرات المطلوب حسابها

و الكود الجديد هنا بشكل منسق

MathTest | Copy Paste Code

رابط البريمج
http://ibnyassen.googlepages.com/MathTest.zip

طبعا لازم تكون مركب على الجهاز

java runtime environment

Download Free Java Software - Sun Microsystems

http://www.java.com/en/download/index.jsp

د. وسام محمد
08-19-2009, 10:24 PM
يا حبذا لو شرحت الغرض من البرنامج والعبارات المستخدمة وتدفق البيانات حتى يفهم القارئ الغير خبير كالعبد لله ماذا يجرى في العالم. رمضان كريم

الشريف أحمد
08-19-2009, 11:06 PM
آسف جدا ^_^

المنتدى كان بيعطينى رسالة خطأ فنسيت أكتب أشياء ^_^

البرنامج بيسألك فى الأول عن كم مرة تريد الحساب ؟
ثم يعطيك رقمين و يسألك عن ناتج طرحهم ..ثم يحسب لك عدد المرات الصحيحة و المرات الخاطئة ^_^

كود البرنامج .. نسيت ان أضع الرابط فى ألأعلى
http://www.copypastecode.com/9197/

الشريف أحمد
08-20-2009, 01:25 AM
البرنامج كان فيه خطأ ..
عدلت الكود

http://www.copypastecode.com/9260/

الشريف أحمد
08-20-2009, 01:49 AM
يا حبذا لو شرحت الغرض من البرنامج والعبارات المستخدمة وتدفق البيانات حتى يفهم القارئ الغير خبير كالعبد لله ماذا يجرى في العالم. رمضان كريم


" من إللى غير خبير :D ههههه "

هو مش الشعار إللى على التى شيرت ده شعار الـ OpenJDK ^_^ ؟؟ و فنجان قهوة تقريبا :D ؟


رمضان كريم يا دكتور ^_^





لكن نعمل شرح البرنامج ببساطة و على قدر فهمى ^_^




import javax.swing.JOptionPane ;

الأمر هذا لإستيراد JOptionPane لإظهار لإظهار الرسائل من كائن مكتبة الرسوميات Swing من الكائن javax



/**
*
* @author sherif
*/


تعليقات بين /* */


public class Main {

إسم الدالة الرئيسية " هيكل برنامج الجافا "



public static void main(String[] args) {



كود الميثود الرئيسية للبرنامج " تبع الهيكل الأساسى أيضا لبرنامج الجافا "


int x = 0 ;


إعلان عن متغير x من نوع العدد الصحيح



String Scount = JOptionPane.showInputDialog(null," How many times do you want to calculate ?");

هذا إعلان لمتغير نصى String Count بعد كده نحوله لمتغير عددى و الهدف من الـ Count هو معرفة عدد مرات الحساب




if(!Scount.matches("\\d+")){
JOptionPane.showMessageDialog(null, "you can not enter characters or lit it empty ");
JOptionPane.showMessageDialog(null, "If you did not enterd an integer number the program will end ." ,
"Caution" ,JOptionPane.WARNING_MESSAGE );
}


وضعت هذا الشرط و دالة


Scount.matches("\\d+")


هى دالة تعطى قيمة منطقية boolean لو النص يحمل غير الشرط المدخل و الحرف d يعنى إنه لابد إنها تكون حاملة لرقم صحيح فعندما لا تجد يكون قيمتها False فيعمل ما بداخل الشرط و أنا أريد العكس فوضعت علامة التعجب و هى تعنى لا أو غير Not
إستخداماتها الكاملة هنا
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#matches%28java.lang.String%29




if(!Scount.matches("\\d+")){
Scount = JOptionPane.showInputDialog(null," How many times do you want to calculate ?");
}


إذا لم يتحقق الشرط تمر على الشرط الآخر و تكون محاولة أخيرة ..فلو أدخل فراغ أو حرف يفشل البرنامج لإنه هيمر على أمر آخر لتحويل النص لرقم فلو وجد أرقام تعطى خطأ



int wcount = Integer.parseInt(Scount) ;

هنا عملية التحويل لرقم صحيح


int count = 1 ;

هذا المتغير للحاجة


int correctanswer = 0 ;
int wronganswer = 0 ;
String output = "";


مفهوم

while (count<=wcount){

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


// Generate two random numbers
int num1 = (int)(Math.random() * 10) ;
int num2 = (int)(Math.random() * 10) ;
//swap greater number
if (num1<num2){
int temp = num2 ;
num2 = num1 ;
num1 = temp ;
}

هذه الفكرة من الكاتب و هى فكرة رائعة

عند توليد رقمين من الدالة Random يمكن أن يكون الرقم الأول أصغير و هو يريد عملية طرح بدون سوالب
فقام بعمل شرط و متغير محلى داخل if و قام بتبديل القيم .



//Take the answer
String Sanswer = JOptionPane.showInputDialog(null,"what is the answer of " + num1 + " - " + num2 + " ? ");

//No characters , No Empty
if(!Sanswer.matches("\\d+"))
JOptionPane.showMessageDialog(null, "you can not enter characters or lit it empty ");


نأخذ الإجابة و نعمل كشف لها هلى هى فارغة أو بحروف و هذه سيتم تكراراها لإن باقى الأوامر بالأسفل تحت بقية الأمر if فى الفرع else فإذا تحقق الشرط لا يمر على الأوامر الموجودة فى else و بالتالى يقوم بإعادة الحلقة مرة آخرى و العودة لنفس الأأمر حتى يتحقق الشرط " طبعا هذه أتعبتنى فكرتها لكنى أحسست بفرحة عند فهمها جيدا "



//check the answer
else{
int answer = Integer.parseInt(Sanswer);
String reply = "" ;
if (answer == (num1-num2)){
reply = " your answer is correct" ;
correctanswer++ ;
}
else {
reply = " you are wrong !" ;
wronganswer++ ;
}

هنا داخل الفرع else نكشف عن الإجابة إذا كانت صحيحة أو خاطئة و إضافة رقم 1 فى كل مرة صحيحة و العكس .


JOptionPane.showMessageDialog(null, reply);
output += "\n" + num1 + " - " + num2 + " = " + Sanswer + " " +((num1 - num2 == answer) ? "Correct" : "Wrong") ;

هذا الأمر يقوم بإضافة إلى المخرج output هذه الجملة مع كل مرة تكرارية و هذا الأمر


((num1 - num2 == answer) ? "Correct" : "Wrong")


مثل



if (x > 0)
y = 1
else
y = -1;





y = (x > 0) ? 1 : -1;

و هو أمر مختصر و جميل


//The Loop Control
count++;

الحلقة التكرارية بدون قيد ستظل تتكرر و هذا هو المتحكم فيها يزداد مع كل مرة يمر فيها " خلال else فقط "


}
}


//End of loop
JOptionPane.showMessageDialog(null, output + "\n" + "The Correct answers is " + correctanswer + "\n" + "The wrong answers is " + wronganswer);


}
}



نهاية الدالة و يعطى المخرج النهائى

د. وسام محمد
08-20-2009, 08:50 AM
كفيت ووفيت وفي انتظار المزيد من المشاركات، لعلنا نشاهد متخصص في برمجة جافا قريباً معاً

الشريف أحمد
08-20-2009, 10:05 AM
كفيت ووفيت وفي انتظار المزيد من المشاركات، لعلنا نشاهد متخصص في برمجة جافا قريباً معاً

الله المستعان و دعواتك بالتوفيق
i

كان فيه خطأ فى البرنامج و قمت بتحديث الرابط