الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف ارتب مجموعة من الاوبجكتز باستخدام Comparable

بدأه فتاة الغد في 26 مارس 2014 · 5 رد · 737 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..
إذا كان عندي برنامج يحتوي 2 كلاس .. أحدهما يحتوي المين مثود والاخر كلاس ثاني .. يقوم البرنامج باستقبال الـ ID من اليوزر ويقوم بعرضه بعد ترتيبه تصاعديا باستخدام مثود comapreTo من كلاس Comparable ...
سؤالي .. كيف أستطيع عمل برنامج يقوم بترتيب الـID لعدد كبير من الطلاب ( عدد غير محدد وليس 3 طلاب فقط كما في المثال ) ..
وكيف أعمل حركة أختصر فيها استخدام الـ if ؟

ومثال ذلك :
ــــــــــــــــــــــــــــــــــــــ
1- عرفت 3 أوبجكتز من نوع ستيودنت ( الكلاس الاخر )


Student s1 = new Student () ;
Student s2 = new Student () ;
Student s3 = new Student () ;

ـــــــــــــــــــــــــــــــــــــ
2- استقبلت المعلومات من اليوزر
( استخدمت الـset لان الداتا ممبر معرفة في الكلاس از private )


java.util.Scanner input = new java.util.Scanner(System.in) ;
System.out.println("Enter ID for the fisrt Student:");
int id = input.nextInt();
s1.setID(id);
System.out.println("Enter name for the fisrt Student:");
String n = input.next();
s1.setname(n);
System.out.println("Enter ID for the second Student:");
id = input.nextInt();
s2.setID(id);
System.out.println("Enter name for the second Student:");
n = input.next();
s2.setname(n);
System.out.println("Enter ID for the third Student:");
id = input.nextInt();
s3.setID(id);
System.out.println("Enter name for the third Student:");
n = input.next();
s3.setname(n);
ـ

ـــــــــــــــــــــــــــــــــــــ
3- رتبتهم تصاعديا


if (s1.compareTo(s2) > 0 && s1.compareTo(s3) > 0 && s2.compareTo(s3)> 0 ){
System.out.println(" 1- "+s3.toString());
System.out.println(" 2- "+s2.toString());
System.out.println(" 3- "+s1.toString());
}
else if (s1.compareTo(s2) > 0 && s1.compareTo(s3) > 0 && s2.compareTo(s3) < 0){
System.out.println(" 1- "+s2.toString());
System.out.println(" 2- "+s3.toString());
System.out.println(" 3- "+s1.toString());
}
else if (s2.compareTo(s1) > 0 && s2.compareTo(s3) > 0 && s1.compareTo(s3) > 0 ){
System.out.println(" 1- "+s3.toString());
System.out.println(" 2- "+s1.toString());
System.out.println(" 3- "+s2.toString());
}
else if (s2.compareTo(s1) > 0 && s2.compareTo(s3) > 0 && s1.compareTo(s3) < 0 ){
System.out.println(" 1- "+s1.toString());
System.out.println(" 2- "+s3.toString());
System.out.println(" 3- "+s2.toString());
}
else if (s3.compareTo(s1) > 0 && s3.compareTo(s2) > 0 && s1.compareTo(s2) > 0 ){
System.out.println("1- "+s2.toString());
System.out.println("2- "+s1.toString());
System.out.println("3- "+s3.toString());
}
else if (s3.compareTo(s1) > 0 && s3.compareTo(s2) > 0 && s1.compareTo(s2) < 0 ){
System.out.println("1- "+s1.toString());
System.out.println("2- "+s2.toString());
System.out.println("3- "+s3.toString());
}

ــــــــــــــــــــــــــــــ
4- في الكلاس :

;private int ID ;private String name ; private double GPA

{public void setID (int id){ID = id ;
{public int getID (){return ID ;
public String getname (){return name ;}
public void setname (String n){ name = n ;}
public double getGPA(){return GPA;}
(){} public void setGPA
} public class Student implements Comparable
@Override
} (public int compareTo(Object o
Student s = (Student) o;
if( this.ID > s.ID )
return 1;
else if(this.ID < s.ID)
return -1;
else

return 0;

ــــــــــــــــــــــــــــــ
سؤالي .. كيف أستطيع عمل برنامج يقوم بترتيب الـID لعدد كبير من الطلاب ( عدد غير محدد وليس 3 طلاب فقط كما في المثال ) كما هو الحال في الواقع .. يعني الاوبجكت ماله حد معين .. وكيف أعمل حركة أختصر فيها استخدام الـ if ... ويعني تنفع مع الاوبجكات الكتيرة
وجزاكم الله خيرًا
ملاحطة : هذا السؤال الأصلي :
Task 1:
Create a class called Student that have the students ID, name and GPA as private data members. You should also implement any needed constructors our methods.
It should also override the following:
• Method equals from Class Object: which should compare the students according to their IDs.
• Method toString from Class Object.
• Method comapreTo from Class Comparable: This should also compare the students according to their IDs.
Task 2:
Create a new class called Main with a main method.
In the main method, create 3 objects from the type student. You should ask the user to enter the information using class Scanner . Finally, test the Student by comparing any two objects using equals before printing the three objects in ascending order.

تم تعديل هذه المشاركة بواسطة Eisa Ayed في 26 مارس 2014 في 20:54

#2

ما دمت تتكلم عن الترتيب،فإن خوارزميات التراتيب تبقي نفسها مع أي من هياكل البيانات لذا سأعطييك أمثلة عن ترتيب المصفوفات

 

الطريقة التي تستعملها طريقة بدائية،لا تصلح مع عدد كبير من البيانات لكن بامكانك تطوير طريقتك علي التحو التالي:

مثلا لدينا ثلاث متغيرات A B C

if A>B
{ 
if B>C
{ 
//A>B>C
}
ELSE
{
IF A>C
{
//A>C>B
}
ELSE
{
//C>A>B
}
}
}
ELSE
{
IF A>C
{
//B>A>C
}
ELSE
{
IF B>C
{
//B>C>A
}
ELSE
{
//C>B>A
}
}
}

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

TRI PAR TAS

TRI PAR SELECTION

TRI PAR INSERTION

TRI RAPID

TRI PAR FUSION

يمكنك البحث عنها كنت أرغب بوضع روابط لكن الروابط التشعبية لا تعمل بالمنتدى حاليا و لا أعرف السبب

 

و إليك هذا الكتاب عن خوارزميات البحث و الترتيب

خوارزميات البحث و الترتيب.pdf

تم تعديل هذه المشاركة بواسطة kenham في 26 مارس 2014 في 23:44

1
#3

جزاك الله خيرًا ..
لكن إذا تكرمت انا اريد طريقة تصلح لعدد كبير من البيانات ..
مثلا لترتيب طلاب جامعة أو مدرسة حسب أرقامهم التسلسلية .. ( عدد كبير أو غير محدد )
وهل يمكن فعل ذلك بواسطة الـif ؟؟
وشكرا
 

تم تعديل هذه المشاركة بواسطة فتاة الغد في 26 مارس 2014 في 14:55

#4
اقتباس

 

لكن إذا تكرمت انا اريد طريقة تصلح لعدد كبير من البيانات ..

مثلا لترتيب طلاب جامعة أو مدرسة حسب أرقامهم التسلسلية .. ( عدد كبير أو غير محدد )

 الطرائق التي بالكتاب تصلح لذلك

1
#5

يمكنك انشاء ArrayList 

ArrayList<Student> students=new ArrayList<Student>();

بعدها تاخذ المدخل طالما اليوزر لم يدخل -١ مثلاً 

 

java.util.Scanner input = new java.util.Scanner(System.in) ;
boolean flag=true
        while(flag)
        {
            System.out.println("Enter Student information or -1 to quit");
            String line=input.nextLine();
            // process line
            if(line!=-1)
            {
            Strudent s=new Student(ID,name);
            students.add(s);
            }
            else
                flag=false;
            
        }

بالنسبة للترتيب ،، انت عملت compareto عشان ماتعمل هذي الاف ستيتمنت الكثيره ,, اتذكر انه فيه اكثر من طريقه لعمل هالشي.. 

يمكنك تنادي Collections.sort وتخليها تتولى هذا الترتيب بناءاً على comparator عندك

اسهل طريقه مثل كذا 

 

 

 
       Collections.sort(students, new Comparator<Student>(){
            @Override
            public int compare(Student o1, Student o2) {
               return o1.compareto(o2); 
            }
        });

طبعاً اكوادي كلها خطا لكن المفهوم ان شاء الله واضح . 

#6

جزاك الله خيرًا وبارك فيك .. 
لكن اكوادك مالخطأ فيها ؟

مواضيع مشابهة