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

ظهور خطأ استثناء عند حذف عنصر من المصفوفه

بدأه هلال15 في 22 مارس 2011 · 9 رد · 612 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اخواني/ اخواتي الاعزاء سبق وان كتبت موضوع وهو كيفيه حذف و اضافه عنصر في المصفوفه

لقد ساعدني احد الاعضاء في حل بعض الاخطاء اللتي وقعت بها وهذا هو الكود :

public class Student 
{

        final int NUMBER_OF_STUDENT= 5;
        String[] student = new String[NUMBER_OF_STUDENT];
        public static int i=0;
        public void addStudent(String STUDENTE) 
         {
                if (i<student.length)
                   {
                                student=STUDENTE;
                   }

                    i++;
        }
       public void removeStudent(String STUDENTE)
        {
              for (int i = 0; i < student.length; i++) 
                   {
                        //try {
                         if (student.equals(STUDENTE))
                                {
                                        student=null;
                                        break;
                                }
                           // }catch (Exception e) {
                                //System.out.println("There is no element");
                           // }
                    }
        }


}

نلاحظ ان المصفوفه محدده وهي فقط تضيف خمس عناصر ولكن قمت بتجربه هل استطيع اضافه اكثر من خمس عناصر؟ والاجابه كانت غير متوقعه وهي انني استطعت اضافه اكثر من خمس عناصر مع العلم ان هذا غير منطقي

وعندما قمت باضافه الخمس عناصر واردت ان احذف البعض منها مثل ("tt") لا اعلم ماهي الاستراتيجيه بعض الاحيان تحذف لي عنصر من دون ظهور اي خطا وبعض الاحيان يظهر خطا استنثاء قمت باخذ صوره من المخرجات لتوضح المشكله :

screen-capture-1.png?w=554e28d4

وشكرا مقدما ً علي ماتبذلونه من جهاد لمساعده اخوانكم .

والله الموفق

تم تعديل هذه المشاركة بواسطة هلال15 في 22 مارس 2011 في 01:12

#2

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

لقد عدلت فقط الاضافه لا اعلم عن الحذف هل هي تعمل

public class Student 
{

        final int NUMBER_OF_STUDENT= 5;
         String[] student = new String[NUMBER_OF_STUDENT];
        public int i=0;
        public void addStudent(String STUDENTE) 
         {
                if (i<student.length)
                   {
                                student=STUDENTE;
                                i++;
                   }
                   else
                   {
                   	System.out.println("you cant add new student");
                   }


        }
       public void removeStudent(String STUDENTE)
        {
              for (int i = 0; i < student.length; i++) 
                   {
                        //try {
                         if (student.equals(STUDENTE))
                                {
                                        student=null;
                                        break;
                                }
                           // }catch (Exception e) {
                                //System.out.println("There is no element");
                           // }
                    }
        }


}

تم تعديل هذه المشاركة بواسطة pro.fahd في 22 مارس 2011 في 01:37

albert_einstein.jpg

Untitled-AE.jpg
#3
pro.fahd كتب:

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

لقد عدلت فقط الاضافه لا اعلم عن الحذف هل هي تعمل

public class Student 
{

        final int NUMBER_OF_STUDENT= 5;
         String[] student = new String[NUMBER_OF_STUDENT];
        public int i=0;
        public void addStudent(String STUDENTE) 
         {
                if (i<student.length)
                   {
                                student=STUDENTE;
                                i++;
                   }
                   else
                   {
                   	System.out.println("you cant add new student");
                   }


        }
       public void removeStudent(String STUDENTE)
        {
              for (int i = 0; i < student.length; i++) 
                   {
                        //try {
                         if (student.equals(STUDENTE))
                                {
                                        student=null;
                                        break;
                                }
                           // }catch (Exception e) {
                                //System.out.println("There is no element");
                           // }
                    }
        }


}

شكرا اخوي ابو فهد علي الرد

ولكن مازال الاستنثاء يظهر لي nullPointerException

#4
هلال15 كتب:

شكرا اخوي ابو فهد علي الرد

ولكن مازال الاستنثاء يظهر لي nullPointerException

تظهر متى عند الحذف او الاضافه

albert_einstein.jpg

Untitled-AE.jpg
#5

عرفت السبب

السبب هو انك تضع للقيمه المحذوفه null

فمثلا عندما احذف اسم الطالب في الindex الاول راح يعطيه null واريد ان احذف اسم الطالب اخر ولنقل في الindex الثالث فعندما يقارن القيمه في الindex الاول الا وهي null راح يعطيك الexception

فلحل المشكله اما عن طريق استخدام مؤشر او اعطاها قيمه ""

وشكراا

1
albert_einstein.jpg

Untitled-AE.jpg
#6

اهلا اخوي فهد الاكسبشن يظهر عندما احذف قيمه وقد يكون السبب مثل ماقلت .

وممكن توضح لي ماذا تقصد باعطائها مؤشر؟

وشكرا لك

#7

عدلت على الحذف

public class Student 
{

        final int NUMBER_OF_STUDENT= 5;
         String[] student = new String[NUMBER_OF_STUDENT];
        public int i=0;
        public void addStudent(String STUDENTE) 
         {
                if (i<student.length)
                   {
                                student=STUDENTE;
                                i++;
                   }
                   else
                   {
                   	System.out.println("you cant add new student");
                   }


        }
       public void removeStudent(String STUDENTE)
        {
        	int i;
        	boolean check=false;
        	if(student[0]==null)
        		System.out.println("there is no student to remove");

        			for (i=0; i < student.length; i++) 
                   {
                         if (student.equals(STUDENTE))
                                {
                                        student=null;
                                        check=true;
                                        break;
                                }
                    }

                    if(!check)
                    	System.out.println("there is no identical student");

                    	if(check)
                    	{
                    		 for(int j=i;j<student.length;++j)
                    {
                    	if(j==student.length-1)
                    		student[j]=null;
                    		else
                    			student[j]=student[j+1];
                    }
                    	}

        }

اذا عندك اي ملاحظه اخبرني

albert_einstein.jpg

Untitled-AE.jpg
#8

يعطيك الف عافيه فهد علي المساعده

بس ممكن شرح بسيط لكود الحذف لاني احس ضعت فيه

وان شاء الله في موازيين حسناتك

والله يوفقنا جميعا ً

تم تعديل هذه المشاركة بواسطة هلال15 في 23 مارس 2011 في 10:28

#9

السلاام عليكم

هنا فمت بانشاء مصفوفة من النوع string ,و حجمها 5

 String[] student = new String[NUMBER_OF_STUDENT];

اما فى هذه الدالة:

public void addStudent(String STUDENTE)

فى هى تأخذ متغير من النوع string و لا تقوم بأرجاع اى شىء

داخل هذه الدالة تجد هذه الجملة الشرطية

i

f (i<student.length)
                   {
                                student=STUDENTE;
                                i++;
                   }
                   else
                   {
                        System.out.println("you cant add new student");
                   }

و هى تقوم باخال العناصر داخل المصفوفة و عندما تمتلىء المصفوفة المكونة من 5 عناصر و يريد المستخدم ادخال عنصر اخر

تظهر هذه الرسالة

you cant add new student

و توجد دالة اخرى :

public void removeStudent(String STUDENTE)

و هى تأخذ متغير من النوع string و لا تقوم بأرجاع شىء

بداخلها جملة شرطية :

if(student[0]==null)
                        System.out.println("there is no student to remove");

حيث ان لو المصفوفة خالية و لا يوجد فيها اى عنصر و اراد المستخدم ان يمسح عنصر فيها تظهر له هذه الرسالة

there is no student to remove

ثم نجد loop من اجل مسح العنصر الذى يريده المستخدم

 for (i=0; i < student.length; i++) 
                   {
                         if (student.equals(STUDENTE))
                                {
                                        student=null;
                                        check=true;
                                        break;
                                }
                    }

حيث يقوم بأيجاد العنصر المساوى للعنصر الذى يريده المستخدم ثم يقوم مسحه

و ان لم يجد عنصر مشابه ينفذ هذا الكود

if(!check)
                        System.out.println("there is no identical student");

و تظهر هذه الرسالة

there is no identical student

اما هنا :

if(check)
                        {
                                 for(int j=i;j<student.length;++j)
                    {
                        if(j==student.length-1)
                                student[j]=null;
                                else
                                        student[j]=student[j+1];
                    }
                        }

يقوم بعمل shift لعناصر المصفوفة نتيجة مسح احد عناصرها

00020309t.gif

1958_1963.gif
#10

الله يرزقكم الجنه يارب

وعلي المساعده اللي تقدمونها لاخوانكم

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…