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

مشاهدة النسخة كاملة : لمبرمجين الجافا سؤال في array



يوسف الرحيمي
27-08-2014, 09:57 AM
السلام عليكم

كيف اخلي مدخلات المستخدم تخزن في مصفوفه ,, (قاعد اطور نفسي :D)
لاني حاولت ويعطيني خطاء او مايمشي صح بس اواجه مشكلة في for loop ان لازم يدخل كل الاسامي

البرنامج اللي اشتغل عليه عباره عن
class university
class students
class grades

الغرض من البرنامج انه اذا دخل اليوز اسمه يطبع له اسمه بالاضافة الى درجته

بس ماش مش راضيه تضبط معي صح

ملاحظه : كيف اقدر اضيف الكود هنا ؟

وشكرا

Ab.K.F
27-08-2014, 03:20 PM
و عليكم السلام،

حأشرحها لك قريب لأن جا وقت صلاة العصر.

عطني 40 دقيقة بعد الصلاة للشرح.

شي كويس أنك بتحاول تطور من نفسك لأن مصفوفة ثلاثية الأبعاد لها علاقة بقاعدة بيانات إسمها relational database و يمكن حندرسها بالتفصيل في مواد المستوى الخامس.

بالتوفيقـ

Ab.K.F
27-08-2014, 04:50 PM
السلام عليكم

كيف اخلي مدخلات المستخدم تخزن في مصفوفه ,, (قاعد اطور نفسي :D)
لاني حاولت ويعطيني خطاء او مايمشي صح بس اواجه مشكلة في for loop ان لازم يدخل كل الاسامي

البرنامج اللي اشتغل عليه عباره عن
class university
class students
class grades

الغرض من البرنامج انه اذا دخل اليوز اسمه يطبع له اسمه بالاضافة الى درجته

بس ماش مش راضيه تضبط معي صح

ملاحظه : كيف اقدر اضيف الكود هنا ؟

وشكرا

أهلاً من جديد،

المصفوفة إللي تحتاجها لازم يكون فيها 3 مدخلات (مصفوفة ثلاثية) مثل المثال إللي تحت:

int numbers[][][] = new int[5][5][5]; >>> like this
String[][][] words = new String[4][4][4]; >>> like this

قبل ما أشرح الطريقة، خل نبدأ من الـ مصفوفة أحادية و شكلها زي كذا:
String[] names = new String[5]; > line 1

تذكر IT110؟
إذا تبغا تمثل 8 أعداد لازم تبدأ من الصفر و تنتهي بـ السبعة. إذا تبغا تمثل 16 رقم، أبدأ من الصفر و أنهي الأرقام بـ 15.

كذا المصفوفة، إذا تبغا تخزن في أول خانة، لازم تكون القيمة صفر مثل كذه:
names[0] = "Yousef"; > line 2
طيب...و الخانة إللي بعدهاا(الخانة الثانية)؟ الجواب هو:
names[1] = "Hazim"; > line 3

يعني لو كان عندك 6 أمكنة لتخزين بيانات، الأعداد هي من 0 إلى 5. لو كانت 90 خانة، الأعداد هي من 0 إلى 89.

القاعدة هي:
لو عندك خانات عددها س، الخانات تبدأ من 0 و تنتهي بـ س ناقص 1.

كذا يكون شكل مصفوفة عدد خاناتها س:
1644


خل قيمة الـ س 6 و آخر خانة حتكون 5. جرب بعد تخلي قيمة الـ س 16 و آخر خانة حتكون 15.
=================

الآن حأتكلم عن الخانات الثنائية الأبعاد (two dimentional array).

شكلها حيكون كذا:
double array[][] = new double[5][3]; >>> like this

خل ناخذها خانة خانة و نبدأ بالخانة إللي رقمها خمسة.
شكلها حيكون مثل الصورة إللي فوق (خمس خانات تبدأ من 0 و تنتهي بـ 4). كل خانة من هذي الخانات الحمسة فيها 3 خانات و هذي صورة منها:

(أكمل بعدين)

Ab.K.F
27-08-2014, 06:00 PM
التكملة

معنى الأرقام إللي في هذا السطر:
double array[][] = newdouble[5][3]; >>> like this

هو عندك خمس خانات و كل خانة من هذي الخانات الخمسة فيها ثلاث خانات (و الثلاث خانات هذي هي من 0 إلى 2).

طيب كيف لو عكسنا الأرقام؟ يعني:

double array[][] = newdouble[3][5]; >>> like this

صار المعنى عندك ثلاث خانات من 0 إلى 2 و كل خانة من الخانات الثلاثة فيها 5 خانات (و الخانات الخمس هذي هي من 0 إلى 4).

الشكل حق:
double array[][] = newdouble[5][3]; >>> like this
يكون كذا:

1647

طيب لو قلنا تبغا تخزن القيمة خمسة و نص في الخانة الرابعة و في الخانة الرابعة تبغا تحط القيمة في الخانة الأولى. كذا الطريقة:
array [3][0] = 5.5 >> like this

كتبناها بهذي الطريقة لأن4-1 = 3 و 1-1 = 0. ;)

و حتتخزَّن و تكون الخلية شاغرة:
1648

طيب لو طلبنا منك أن تأشر على الخلية الثالثة و في الخلية الثالثة نبغا الخلية الثالثة. هذا الجواب:

1649
تم التأشير على [2][2] في الصورة

حأكمل بعد صلاة المغرب.

أعذرني. حآخذ أكثر من 40 دقيقة!

يوسف الرحيمي
27-08-2014, 06:09 PM
الله يعطيك العافيه اخوي عبدالاله

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

ودي احط كودي هنا بس مانيب عارف كيف

وجزاك الله الف خير

Ab.K.F
27-08-2014, 07:46 PM
الله يعطيك العافيه اخوي عبدالاله

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

ودي احط كودي هنا بس مانيب عارف كيف

وجزاك الله الف خير

الله يعافيكـ و جزاك ألف خير.

للأسف ما حتضبط لأن عندك ثلاث أشياء:
- إســم الــمــســتــخــدم
- إســم الــطــالــب
- درجــة الــطــالــب

المطلوب في السؤال أن إذا دخَّل المستخدم إسم المستخدم، حيطلع إسم الطالب و درجته. هنا، نحتاج مصفوفة بثلاث خانات بهذا الشكل:

String records[][][] = new String[4][1][3]; >> like this

و الخانة الأولى (إللي فيها الرقم أربعة) فيها عدد المستخدمين (يِمْكِنْ المطلوب منك عدد غير الـ 4). في الخانة الثانية، حطيت واحد. ليه؟ لأني بغيت كل مستخدم له شي واحد و هذا "الشي الواحد" حينقسم إلي ثلاث حاجات:
- إســم الــمــســتــخــدم
- إســم الــطــالــب
- درجــة الــطــالــب

طيب كيف حيكون شكل المصفوفة إللي فوق؟

هذا شكلها:
1651

إذا نبغا نخزن إسم المستخدم في الخانة الأولى، أنا عن نفسي أحطه بهذي الطريقة:
records [0][0][0] = "Ab.K.F"; >> like this

حط إسم الطالب الخاص بـ Ab.K.F كذا:
records [0][0][1] = "Abdulelah"; >> like this

حط درجة الطالب الخاص بـ Ab.K.F كذا:
records [0][0][2] = "+A"; >> like this

وحتكون الـمـعـلـومـاتـ مخزنة بهذي الطريقة:
1652

و إذا تبغا البرنامج يطلِّع معلومات الطالب عن طريق إسم المستخدم، أنا عن نفسي أكتبه كذا:

1653

الـــــنـــــهـــــايـــــة




ملاحظة:
بعد التفكير، طلع أن أقدر أسوي البرنامج بـ مصفوفة ثنائية (و المصفوفة الثنائية أصغر من الثلاثية).

بِالتَّوْفِيقْـ

Ab.K.F
27-08-2014, 07:57 PM
ملاحظة:

هذا شكل المصفوفة حقت السؤال لو كانت المصفوفة ثنائية:
1654

يوسف الرحيمي
27-08-2014, 08:46 PM
طيب اخوي لو سويت مصفوفة ثنائيه او ثلاثيه بس من نوع String كيف يتخزن فيها int ؟

وجزاك الله خير اخووي

mutaib
27-08-2014, 09:22 PM
السلام عليكم

كيف اخلي مدخلات المستخدم تخزن في مصفوفه ,, (قاعد اطور نفسي :D)
لاني حاولت ويعطيني خطاء او مايمشي صح بس اواجه مشكلة في for loop ان لازم يدخل كل الاسامي

البرنامج اللي اشتغل عليه عباره عن
class university
class students
class grades

الغرض من البرنامج انه اذا دخل اليوز اسمه يطبع له اسمه بالاضافة الى درجته

بس ماش مش راضيه تضبط معي صح

ملاحظه : كيف اقدر اضيف الكود هنا ؟

وشكرا





وعليكم السلام والرحمة


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


تستطيع اضافة كودك عن طريق الظغط على أختيار "الانتقال الى الوضع المتطور" الذي يظهر أسفل نافذة المشاركة بعد ذالك قم بأختيار أيقونة أضافة كود , مثال :


http://im50.gulfup.com/rRDgjJ.png





بعد اختيار ايقونة أدراج الكود قم بأضافة كودك بين كلمتين كود , يصبح هكذا ..



cout << "hello world" ;



ملاحظة بشأن ادخال المستخدم اسمه ومن ثم وطباعة ايضا اسمه ودرجته , أرى من الافضل ان تجعل المستخدم يقوم بأدخال رقمة الجامعي ومن ثم البرنامج يقوم بطباعة اسمة الكامل ودرجتة وجميع المعلومات الاخرى , وان سألت لماذا لان الاسماء تكون احيان متشابهه وتصبح لخبطة لان هنالك احيان شخصان نفس الاسم ونفس اسم الاب والجد وايضا سبب اخر هو ان اختلاف الحروف كونها small or capital letters يأثر على مخرجات البرنامج ولاهذا الاسم كونه string يكون حساس جدا في هذه الحالة ويجب عليك التعامل معه على هذا المبدأ . فابعيدا عن مشاكله أنصحك بربط البحث برقم الطالب كونه من المستحيل ان يكون متكرر لطالب اخر وايضا غير حساس لانه رقم فقط وليس string .


في انتظار كودك <

يوسف الرحيمي
27-08-2014, 10:00 PM
يعطيك العافيه اخوي متعب

عموما المشكله اللي واجهتها في for loop صح اني ابيه يخزنها في مصفوفه مدخلات مالستخدم .. بس بنفس الوقت لو استعلام طالب واحد المفروض انها مايكرر .. هنا ماعرفت وش اسوي
في البرنامج هذا حاولت اني اطبع الاسم مع تخصص الطالب .. وماضبطت معي

University class




package university;
import java.util.Scanner;


public class University {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Students nameOfStudent = new Students();
Class nameOfClasses = new Class();
Scanner input = new Scanner(System.in);
String[] enterName = new String[3];
String[] className = new String[3];

nameOfStudent.enterStudentsNames(enterName);
nameOfClasses.getClassName(className);






}

}



Student class


package university;
import java.util.Scanner;

public class Students {
String[] students = new String[3];
Scanner input = new Scanner(System.in);



public String[] enterStudentsNames(String[] students)
{
this.students = students;
for(int index = 0 ; index < students.length; index++)
{
System.out.print("Enter Your Name ");
students[index] = input.nextLine();
System.out.println(students[index]);
}

return students;
}



}


Classes class



package university;
import java.util.Scanner;


public class Class {
Students getNames = new Students();
Scanner input = new Scanner(System.in);
String[] classes = new String[3];



public String[] getClassName(String[] classes)
{
this.classes = classes;

for(int index = 0 ; index < classes.length; index++ )
{
System.out.println("Enter Your Class");
classes[index] = input.nextLine();
if(classes[index].equals("CS"))
{
System.out.print(classes[index] );
} else
System.out.println("You don't have class!");

}

return classes;
}





}


وشكرا لكم يا شباب

mutaib
28-08-2014, 01:09 AM
يعطيك العافيه اخوي متعب

عموما المشكله اللي واجهتها في for loop صح اني ابيه يخزنها في مصفوفه مدخلات مالستخدم .. بس بنفس الوقت لو استعلام طالب واحد المفروض انها مايكرر .. هنا ماعرفت وش اسوي
في البرنامج هذا حاولت اني اطبع الاسم مع تخصص الطالب .. وماضبطت معي


وشكرا لكم يا شباب





الله يعطيك العافية اخوي يوسف


بصراحة لم أفهم متطلبك من البرنامج , في كلاس University الذي هو الـ main كلايس لديك عملت مصفوفتين هما enterName و className ومن ثم ادخلت المصفوفتين من دون أي قيمة كا parameter في الدالة enterStudentsNames و getClassName .... ؟


انت تريد ان تكون اسامي وتخصصات ومواد الطلاب ان تكون مخزنه في مصفوفه ومن ثم الطالب يستدعي المعلومات عن طريق اسمه ؟

لا نستطيع عرض معلومات الطالب بناء على اسمه واسمه من الاساس ليس مخزن , أستخدامك الأكواد أكواد صحيح 100% بالمئة ولكن المنطق في العملية فيه خطأ . الأفضل ان تغير خطة عمل البرنامج وتحدد مجرى سير العملية قبل ان تكتب الاكواد . لا اريد الاطالة عليك ولاكن اذا كنت مصمم على عمل مصفوفات وتخزين المعلومات بها أستخدم كلاس Arraylist أفضل لك . اذا كنت تريد ان نعيد عمله جميعا لا مانع لدي فقط أخبرني بعمليات البرنامج والمتطلبات التي تريدها في البرنامج او بالاصح ماذا تريد ان تستخدم وسوف اضعها لك هنا ومن ثم نتناقش بها .


مشاركة جميلة شكرا لك .

مكافحة
28-08-2014, 02:14 AM
الموضوع شيق خصوصا إنني أخدته تحدي .. إذا كنت اقدر افهم حديثكم أم لا :)

جزاكم الله خير

Ab.K.F
28-08-2014, 04:09 AM
الموضوع شيق خصوصا إنني أخدته تحدي .. إذا كنت اقدر افهم حديثكم أم لا :)

جزاكم الله خير

أجمعين.
بالنسبة لـ فهم الأشياء إللي في الموضوع، لازم تعرفي حاجات معينة من كتاب جافا.

إحنا بنتكلم عن حاجات متعلقة بالشابتر الأخير حق مادة الـcs140.















وعليكم السلام والرحمة


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


تستطيع اضافة كودك عن طريق الظغط على أختيار "الانتقال الى الوضع المتطور" الذي يظهر أسفل نافذة المشاركة بعد ذالك قم بأختيار أيقونة أضافة كود , مثال :


http://im50.gulfup.com/rrdgjj.png





بعد اختيار ايقونة أدراج الكود قم بأضافة كودك بين كلمتين كود , يصبح هكذا ..



cout << "hello world" ;



ملاحظة بشأن ادخال المستخدم اسمه ومن ثم وطباعة ايضا اسمه ودرجته , أرى من الافضل ان تجعل المستخدم يقوم بأدخال رقمة الجامعي ومن ثم البرنامج يقوم بطباعة اسمة الكامل ودرجتة وجميع المعلومات الاخرى , وان سألت لماذا لان الاسماء تكون احيان متشابهه وتصبح لخبطة لان هنالك احيان شخصان نفس الاسم ونفس اسم الاب والجد وايضا سبب اخر هو ان اختلاف الحروف كونها small or capital letters يأثر على مخرجات البرنامج ولاهذا الاسم كونه string يكون حساس جدا في هذه الحالة ويجب عليك التعامل معه على هذا المبدأ . فابعيدا عن مشاكله أنصحك بربط البحث برقم الطالب كونه من المستحيل ان يكون متكرر لطالب اخر وايضا غير حساس لانه رقم فقط وليس string .


في انتظار كودك <






يعطيكـ العافية أخوي متعب على الفَزْعَة. إن شاء الله نلقى الحل.

لي رجعة للموضوع و النظر إلى كود الأخ يوسف حول الساعة 8 الصباح إن شاء الله.

بِالتَّوْفِيقْـ

Ab.K.F
28-08-2014, 05:15 AM
في طريقة لتشغيل البرنامج بـ المصفوفات الأحادية. فكرت فيها و إن شاء الله أساعدك حول الساعة 8 اليوم.

إذا حتستخدم مصفوفة أحادية، حتحتاج ثلاث مصفوفات أحاديات. :)

بِالتَّوْفِيقْـ

يوسف الرحيمي
28-08-2014, 06:50 AM
الله يعطيك العافية اخوي يوسف


بصراحة لم أفهم متطلبك من البرنامج , في كلاس University الذي هو الـ main كلايس لديك عملت مصفوفتين هما enterName و className ومن ثم ادخلت المصفوفتين من دون أي قيمة كا parameter في الدالة enterStudentsNames و getClassName .... ؟


انت تريد ان تكون اسامي وتخصصات ومواد الطلاب ان تكون مخزنه في مصفوفه ومن ثم الطالب يستدعي المعلومات عن طريق اسمه ؟

لا نستطيع عرض معلومات الطالب بناء على اسمه واسمه من الاساس ليس مخزن , أستخدامك الأكواد أكواد صحيح 100% بالمئة ولكن المنطق في العملية فيه خطأ . الأفضل ان تغير خطة عمل البرنامج وتحدد مجرى سير العملية قبل ان تكتب الاكواد . لا اريد الاطالة عليك ولاكن اذا كنت مصمم على عمل مصفوفات وتخزين المعلومات بها أستخدم كلاس Arraylist أفضل لك . اذا كنت تريد ان نعيد عمله جميعا لا مانع لدي فقط أخبرني بعمليات البرنامج والمتطلبات التي تريدها في البرنامج او بالاصح ماذا تريد ان تستخدم وسوف اضعها لك هنا ومن ثم نتناقش بها .


مشاركة جميلة شكرا لك .


يعطيك العافيه اخوي متعب

الهدف اللي كنت ابي اوصله من البرنامج اني اخزن المدخل في المصفوفه

عموما الهدف من البرنامج ان الطالب يدخل فرضا اسمه ويطلع له كلاساته اللي سجلها و درجاته

ويبدو لي اني تسرعت في البرنامج لان فهمي للبرمجه لم يتعدى cs140

يوسف الرحيمي
28-08-2014, 06:50 AM
في طريقة لتشغيل البرنامج بـ المصفوفات الأحادية. فكرت فيها و إن شاء الله أساعدك حول الساعة 8 اليوم.

إذا حتستخدم مصفوفة أحادية، حتحتاج ثلاث مصفوفات أحاديات. :)

بِالتَّوْفِيقْـ


جزااك الله خير اخوي عبدالاله ,,

Ab.K.F
28-08-2014, 07:56 AM
الموضوع شيق خصوصا إنني أخدته تحدي .. إذا كنت اقدر افهم حديثكم أم لا :)

جزاكم الله خير
نسيت أذكر أن تقدري تحاولي تفهمي حاجة معينة بس إذا ماقدرتي، دوري عنها في قوقل أو اليوتوب أو حتى المكتبة الرقمية.

Ab.K.F
28-08-2014, 08:59 AM
جزااك الله خير اخوي عبدالاله ,,

أجمعين.

لاحظت أن في كلاس Class، نسيت تسوي instance variable لـ الـ constructor إللي إسمه Class هنا:

private String[] classes; >> This is the
missing line. You can put it anywhere
as long
as it is not inside methods
or constructors

You can put it above the constructor
public String[] getClassName(String[] classes) >> line1
}
this.classes = classes; >> line 2
...
{

بعد ما شفت السطر الناقص، لقيت المعلومات في نفس الكلاس و كلاسات ثانية شوي غير مفهومة في الكلاسات الثلاثة. أنا مع متعب:


أستخدامك الأكواد أكواد صحيح 100% بالمئة ولكن المنطق في العملية فيه خطأ . الأفضل ان تغير خطة عمل البرنامج وتحدد مجرى سير العملية قبل ان تكتب الاكواد


أول شي يوسف لا تستسلم. كويس أنك حاولت من نفسك تكتب الكود.

و عقبال
إجتياز مرحلة التخصص
بإمتياز.

بالنسبة لـ خطة عمل البرنامج، تسمى خطة عمل البرنامج بين المبرمجين بـ algorithm.

طيب خل ناخذ الهدف إللي تبغا تِوْصَلَّهْ و هو أن لما يكتب الشخص إسم المستخدم، البرنامج يعطي معلومات هذا المستخدم مثل إسم الطالب و درجته و المواد إللي سجلها و...إلخ.

طيب، عشن نسوي البرنامج، نحتاج مصفوفة أو أكثر(هذا على حسب الإحتياج). بما أن إسم المستخدم و إسم الطالب من نوع String و درجة الطالب من نوع double، أنا أشوف أننا نحتاج ثلاث مصفوفات و كلها أحادية:

- وحدة لـ إسم المستخدم
- وحدة لـ إسم الطالب
- و وحدة لـ درجته

===============
أنا لاحظت في كُودَكْ (الكود إللي كتبته) أنك تحط كلمة get في أسماء المتغيرات. برنامج الجافا ما حيقول غلط بس كل المبرمجين يستخدموا كلمة get يكون مع الـ methods (ما يكون في الـ constructor أو الـ variable أو إسم الـ class).

هذي أمثلة قبل ما نرجع للـ algorithm حق برنامجك:
getBalance
getAccountNumber
getDate
getMonth
..إلخ.

يتبع!

يوسف الرحيمي
28-08-2014, 09:40 AM
الله يعطيك العافيه اخوي عبدالاله
يبدو لي اني استعجلت ,, لان حدود معرفتي بالبرمجه ماتتعدى cs140

Ab.K.F
28-08-2014, 10:37 AM
طيب الآن عندنا الثلاث المصفوفات و إللي قلنا أنها كلها أحادية.

طيب الآن نحتاج loop بَسْ قبل الـ loop نحتاج كلاس Scanner حتى يقدر المستخدم حق برنامجك يِدَخِّلْ إسم مستخدم و بعدها يعرض معلومات
ذاك المستخدم بعد
الضغط على Enter (زر "إدخال").

أكيد تعرف لـ الـ Scanner. بس بغيت أعطي ملحوظة بسيطة. لابد من إستخدام next بدال nextLine إذا بغيت إسم المستخدم كلمة وحدة و بدون مسافات. بس خل الميثود nextLine زي ما هو بحكم أحياناً نبغا أسماء مستخدمين بمسافات مثل إسم حسابك في هذا المنتدى: يوسف الرحيمي. :)
============

بعد ما سوينا طريقة إدخال للمستخدم، نبغا الآن ناخذ إسم المستخدم إللي دخله الـ user و نحطه في loop. هذا الـ loop حيدور على إسم مستخدم مُطَابِقْ لـ مخزن في أحد المصفوفات. لا تنسَ أن أحد المصفوفات فيها أسماء مستخدمين.

إذا لقى الـ loop إسم مستخدم مُطَابِقْ لـ إللي في المصفوفة، حناخذ رقم الخلية إللي في المصفوفة حقت أسماء المستخدمين و نحطها في المصفوفات الثانية و نطلع إسم الطالب و درجته.

أنا في بالي المصفوفات جنب بعض بهذي الطريقة:

1656

يعني لو كتب المستخدم لبرنامجك إسم المستخدم "i.am.awesome"، حناخذ قيمة الخلية حقت هذا المستخدم و هي 2 و حنحطها في المصفوفات الثانية و نطبع المعلومات من هذي المصفوفات و إللي هي: Kamal Saleh و 30.

إن شاء الله كان الشرح واضح.
إذا في غموض، قلِّي.

بِـالـتَّـوْفِـيـقْـ

Ab.K.F
28-08-2014, 10:40 AM
الله يعطيك العافيه اخوي عبدالاله
يبدو لي اني استعجلت ,, لان حدود معرفتي بالبرمجه ماتتعدى cs140

الله يعافيكـــ.

ما عليك. مع القراءة و التعود حتصير الجافا سَهْلَة جِداً. :)

و عقبال فهم كل شي في الجافا (حتى الـcs141).

يوسف الرحيمي
28-08-2014, 10:45 AM
طيب الآن عندنا الثلاث المصفوفات و إللي قلنا أنها كلها أحادية.

طيب الآن نحتاج loop بَسْ قبل الـ loop نحتاج كلاس Scanner حتى يقدر المستخدم حق برنامجك يِدَخِّلْ إسم مستخدم و بعدها يعرض معلومات
ذاك المستخدم بعد
الضغط على Enter (زر "إدخال").

أكيد تعرف لـ الـ Scanner. بس بغيت أعطي ملحوظة بسيطة. لابد من إستخدام next بدال nextLine إذا بغيت إسم المستخدم كلمة وحدة و بدون مسافات. بس خل الميثود nextLine زي ما هو بحكم أحياناً نبغا أسماء مستخدمين بمسافات مثل إسم حسابك في هذا المنتدى: يوسف الرحيمي. :)
============

بعد ما سوينا طريقة إدخال للمستخدم، نبغا الآن ناخذ إسم المستخدم إللي دخله الـ user و نحطه في loop. هذا الـ loop حيدور على إسم مستخدم مُطَابِقْ لـ مخزن في أحد المصفوفات. لا تنسَ أن أحد المصفوفات فيها أسماء مستخدمين.

إذا لقى الـ loop إسم مستخدم مُطَابِقْ لـ إللي في المصفوفة، حناخذ رقم الخلية إللي في المصفوفة حقت أسماء المستخدمين و نحطها في المصفوفات الثانية و نطلع إسم الطالب و درجته.

أنا في بالي المصفوفات جنب بعض بهذي الطريقة:

1656

يعني لو كتب المستخدم لبرنامجك إسم المستخدم "i.am.awesome"، حناخذ قيمة الخلية و هي 2 و حنحطها في المصفوفات الثانية و نطبع المعلومات من هذي المصفوفات.

إن شاء الله كان الشرح واضح.
إذا في غموض، قلِّي.

بِـالـتَّـوْفِـيـقْـ


واضح يابطـل ,, عافاك الله

طيب الحين بـ loop لو طالب دخل اسمه راح يدور اللوب الين يوصل الى نهايته ,,
يعني لو ابغى ادخل اسمي راح ادخل على عدد طول المصفوفه ,, هنا كيف اتعامل مع اللوب و المصفوفه ,, يعني لو طالب واحد دخل اسمه خلاص يوقف اللوب ويخزن القيم بالمصفوفه ولا يستمر

شاكر لك

Ab.K.F
28-08-2014, 11:51 AM
واضح يابطـل ,, عافاك الله

طيب الحين بـ loop لو طالب دخل اسمه راح يدور اللوب الين يوصل الى نهايته ,,
يعني لو ابغى ادخل اسمي راح ادخل على عدد طول المصفوفه ,, هنا كيف اتعامل مع اللوب و المصفوفه ,, يعني لو طالب واحد دخل اسمه خلاص يوقف اللوب ويخزن القيم بالمصفوفه ولا يستمر

شاكر لك

الله يعافيكـ.

خل أبدأ بـ تخزين المعلومات في مصفوفة.

أشوف الأفضل أن تسويه في method بدال ما تجمعها مع معلومات الـ constructor. خل نسمي هذا الـ method إسم مثل createAccount.

ملاحظة قبل ما أدخل في createAccount:
عشن أسهلك الطريقة، خل حد كل مصفوفة 4 خلايا.

بالنسبة لـ createAccount، لازم نسوي شي في الـ constructor و نخلي فيه instance variable بإسم counter و نوع هذا المتغير حيكون int. نبغى أول قيمة للـ counter صفر كأول قيمة حتى نقدر نخزن بيانات في الخلية
الأولى من كل مصفوفة من المصفوفات الثلاثة. بعد إضافة البيانات، نبغا نضيف واحد لـ قِيمَة counter (يعني: قيمة الـ counter زائد 1). يعني بعد وضع
البيانات في الصف الأول و إللي قيمته 0 في المصفوفة، نبغى نضيف
واحد و تزيد قيمة الـ counter من صفر إلى واحد. كذا، حنقدر نضيف بيانات
في الصف الثاني بإستعمال الرقم واحد (مو 2 لأن2 - 1 = 1). بعد الإضافة البيانات في الخلية الثانية، قيمة الـ counter حتزيد من 1 إلى 2 و كذا حنقدر نخزن البيانات في الخلية الثالثة من كل مصفوفة (3 - 1 = 2).

يتبع في وقتٍ آخر...

mutaib
29-08-2014, 08:28 AM
يعطيك العافيه اخوي متعب

الهدف اللي كنت ابي اوصله من البرنامج اني اخزن المدخل في المصفوفه

عموما الهدف من البرنامج ان الطالب يدخل فرضا اسمه ويطلع له كلاساته اللي سجلها و درجاته

ويبدو لي اني تسرعت في البرنامج لان فهمي للبرمجه لم يتعدى cs140



لا لا بالعكس لم تتسرع خطواتك صحيحة.

قمت بعمل برنامج بناء على فكرتك انت واخوي عبدالاله والي هو عبارة عن ثلاث مصفوفات احاديه : StudentName و StudentCourse و StudentGrade ومصفوفه رئيسية ثنائية تجمع معلومات الطالب في المصفوفات الثلاث السابقة , بحيث المصفوفة الرئيسية الثنائية يكون فيها البحث عندما نريد ان نجد طالب بناء على اسمه .


صورة من البرنامج :


http://im50.gulfup.com/SECGPR.png










نختار الاختيار رقم 1 لطباعة المصفوفة الثنائية التي تجمع معلومات الطلبة مع درجاتهم وموادهم ,




http://im50.gulfup.com/V7Cky0.png




الان نختار الاختيار رقم 2 لأدخال اسم الطالب ويتم البحث عنه في المصفوفة الثنائية ,



http://im50.gulfup.com/kyUpuO.png





هنالك طرق اخرى كثيرة واسهل بكثير , ولاكن بما اننا تحدثنا عن المصفوفات الثنائية والثلاثية هذا المثال ان شاء الله يوضح الفكرة لديك .


اذا كان لديك الوقت , اريدك ان تعدل على كودي وتطورة , بمعنى تضيف اختيار جديد يسمح لمستخدم البرنامج بأضافة اسم طالب جديد مع مواده ودرجاته .





كود كلاس الـ main :








import java.util.* ;






public class home
{










public static void main() {

Scanner input_choice = new Scanner(System.in);
Scanner input_name = new Scanner(System.in);


Student_Information object1 = new Student_Information();

int i = 0 ;

do{

System.out.println(" ####### W3LCOME ####### \n");
System.out.println(" Enter 1 to print all the student information. ");
System.out.println(" Enter 2 to search(find) a student information by his/her name. ");
System.out.println(" Enter 3 to Exit. ");

i = input_choice.nextInt();

if(i==1){

System.out.println("\n");
object1.Student_Information();
object1. print();
System.out.println();
System.out.println("press anykey to return ... or 3 to exit .");


i = input_choice.nextInt();

if(i==3){
System.exit(0);
}else { main();

}
}

if(i==2){

System.out.println("Please enter the student name.");
System.out.println("\nNote that letters can be sensitive(small/capital letters).");


String name = "" ;

name = input_name.nextLine();

object1.Student_Information();

object1.get(name);

System.out.println("press anykey to return ... or 3 to exit .");


i = input_choice.nextInt();
if(i==3){
System.exit(0);
}else { main();

}

}



if(i==3){ System.exit(0); }


else{ System.out.println("error please try again ...") ; }


} while(i < 3);
}
}






























كود الكلاس الـ Student_Information :









public class Student_Information
{


int array_size = 3 ;
String[][] TABLE = new String[array_size][array_size] ;
String[] StudentName = new String[array_size] ;
String[] StudentCourse = new String[array_size] ;
String[] StudentGrade = new String[array_size] ;




public static void print(String[] table) {
for (String i : table) {
System.out.print(i);
System.out.print(" | ");
}
System.out.println();
}



public void Student_Information(){


int array_size = 3 ;



StudentName[0] = "yousif" ;
StudentName[1] = "muhammad" ;
StudentName[2] = "khaled" ;

StudentCourse[0] = "IT101" ;
StudentCourse[1] = "IT110" ;
StudentCourse[2] = "MATH150" ;



StudentGrade[0] = "A+" ;
StudentGrade[1] = "B+" ;
StudentGrade[2] = "C+" ;



int n = 0 ;

while (n < array_size) {

if(n == 0){
for(int i = 0 ; i < array_size ; i++)
{

TABLE[i][n] = StudentName[i];

}
}


if(n == 1){
for(int i = 0 ; i < array_size ; i++)
{

TABLE[i][n] = StudentCourse[i];

}
}

if(n == 2){
for(int i = 0 ; i < array_size ; i++)
{

TABLE[i][n] = StudentGrade[i];

}
}

n++ ;
}

}

public void print(){
for(String[] row : TABLE) {
print(row);
}


}




public void get( String name){

for(int x = 0 ; x < 3 ; x++){

for(int y = 0 ; y < 3 ; y++){



if (TABLE[x][y].equals(name)){

System.out.println("\nStudent name is : " + TABLE[x][y]);
System.out.println("Student current course : " + TABLE[x+1][y+1]);
System.out.println("Student grade : " + TABLE[x+2][y+2]);


}

}

}

}
}











بالتوفيق لنا جميعا .