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

2 remove from dimensional arrays

بدأه قمر الامارات في 2 ديسمبر 2011 · 5 رد · 709 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لسلام عليكم

لو عندي 2 dimensional arrays و اريد أن احذف منها element او صف

مثلا :

 int[][] Dirt = {{4, 2}, {0, 5}, {7, 1}, {3, 3}};

و اريد امسح منها مثلا ... {4,2}

    for (int z = 0; z < 3; z++) {
                           if(pos[0]==Dirt[z][0]&& pos[1]==Dirt[z][1]){
                            System.out.println("Dirt[z][0]"+Dirt[z][0] +"Dirt[z][1]"+Dirt[z][1]);
 // هنا لازم امسح الصف المحدد من الDirt                          
                }
            }

جربت ادور فالنت .. بس اكثر للي الطرق هيه للحذف من الArraylist

أتمنى لو حد عنده فكره كيف ممكن احلها

شكرا

#2

ماذا تعني انك تريد ان تحذف عنصر او سطر من المصفوفة ولماذا؟؟

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

ونصيحة اذا كنت مضطر كثيرا للحذف فاستعمل تقنيات اخرى غير المصفوفات كالـ ArrayList أو الـ LinkedList فهما تحققان لك ما تريدة بسهولة ويسر

بالتوفيق

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#3

الجافا collection مثل ال arraylist, vector ... يسهل الحذف منها

مشاكلها هى استخدام حجم كبير من ال heap memory

بالسنبة لموضوع حذف (او اضافة) عنصر من ال array ، الفكره ببساطة هى استخدام array ثانى ونقل العناصر الية مع اضافة شرط للحذف

على سبيل المثال :

public class RemoveFromArray {

	public static void main(String[] args) {
		int[] myArray = {1,2,3,4,5}; //My Array 

		int toBeRemove = 4; // I want to remove this element (4)

		int []temp = myArray; //Temp array hold the orginal data

		int arrayIndex = 0; //Used as index for the new array size for iteration over it

		//Since I want to remove elemen, so reduce the size by one
		int size = myArray.length; 
		myArray = new int[size - 1]; //clear my array 

		//Copy the data from temp back, but check if the element is equal to 4, don't copy it
		for (int i = 0; i < temp.length; i++) {
			if(temp == toBeRemove)
				continue; //ignore element 4
			else{
				myArray[arrayIndex] = temp;
				arrayIndex++;
			}
		}

		System.out.println("Removed");

		for (int i = 0; i < myArray.length; i++) {
			System.out.println("[" + i + "] " + myArray );
		}
	}
}

باستخدام نفس الفكره مع تغيرات بسيطة ، يمكن الحذف من 2d array على الشكل التالى :

public class RemoveFrom2DArray {

	public static void main(String[] args) {
		 int[][] Dirt = {{4, 2}, {0, 5}, {7, 1}, {3, 3}};
		 int [][]temp = Dirt;
		 int size = Dirt.length - 1;


		 System.out.println("The array before removing : ");
		 for (int i = 0; i < Dirt.length; i++) {
			System.out.println( Dirt[0] + "," + Dirt[1]);
		}

		 Dirt = new int[size][2];
		 int newIndex = 0;

		 //Remove element 7,1 from the array
		 for (int i = 0; i < temp.length; i++) {
			 int[] oneDimension = temp;

			 if(oneDimension[0] == 7 && oneDimension[1] == 1)
				 continue;
			 else{
				 Dirt[newIndex][0] = oneDimension[0];
				 Dirt[newIndex][1] = oneDimension[1];
				 newIndex++;
			 }
		}

		 System.out.println("The array After removing : ");
		 for (int i = 0; i < Dirt.length; i++) {
			System.out.println( Dirt[0] + "," + Dirt[1]);
		}


	}

}
1
#4

مساء الخير

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

اقتباس

[ ][ ][ ][ ][ ][ ][ ][ ]

[ ][ ][ ][ ][ ][ ][ ][ ]

[ ][ ][ ][ ][ ][ ][ ][ ]

[ ][ ][ ][ ][ ][ ][ ][ ]

[ ][ ][ ][ ][ ][ ][ ][ ]

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

[ ][ ][ ][ ][ ][ ][ ][ ]

[ ][ ][ ][ ][ ][ ][ ][ ]

[ ][ ][ ][ ][ ][ ][ ][ ]

choise taste equal4:5

4:5

nowX and nowY

at test.Move(test.java:121)

at test.main(test.java:149)

Java Result: 1

BUILD SUCCESSFUL (total time: 0 seconds)

و هذا الكود بعد ما ضفت له كود الحذف :

public void Move() {
        Collections.shuffle(orientation);
        int nowX = 4, nowY = 4;           
        int counter = 0;
        int strightCounter = 1;
        Dirt = new int[size][2];
        int newIndex = 0;
        int x = 0;
        int y = 0;
        while (!(Dirt.length == 0)) {
//               for (int x = 0; x < strightCounter; x++) {
//                   for (int y = 0; y < strightCounter; y++) {

            for (int i = 0; i < 3; i++) {
                choices.add(orientation.get(i));

                board[nowX][nowY] = "1";
                int[] pos = gostright(nowX, nowY);
                nowX = pos[0];
                nowY = pos[1];
                System.out.println("" + nowX + ":" + nowY);
                System.out.println("nowX and nowY" + board[nowX][nowY]);
                board[nowX][nowY] = "#";
                moves++;
                for (int z = 0; z < temp.length; z++) {
                    int[] oneDimension = temp[z];
                    if (pos[0] == oneDimension[0] && pos[1] == oneDimension[1]) {
                                 continue;
                    }else{           
                        Dirt[newIndex][0] = oneDimension[0];
                        Dirt[newIndex][1] = oneDimension[1];
                        newIndex++;
                    }
                }
                System.out.println("The array After removing : ");
                for (int s = 0; s < Dirt.length; s++) {
                    System.out.println(Dirt[0] + "," + Dirt[1]);
                }

                System.out.println(toString());
                System.out.println(orientation.get(i));
                System.out.println("Choices " + choices);
                System.out.println("# move" + moves);
                if (Wall(nowX, nowY)) {
                    break;
                }
            }

            counter++;

        }
    }

صح انا كاتبه الكود على اساس ال while توقف .. اذا انمسحت كل العناصر من الarray

؟؟ اي فكرة وين الغلط ؟

تم تعديل هذه المشاركة بواسطة قمر الامارات في 2 ديسمبر 2011 في 14:51

#5

إذا امكن وضع الكود كامل حتى نتمكن من معرفة مكان الخطأ

لكن من الرسالة

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

على ما عتقد انة بسبب تحديد حجم ال array

فى المثال الخاص بى قمت بعمل التالى :

 int size = Dirt.length - 1;

                 Dirt = new int[size][2];

ولكنى لم اقم بوضعها داخل loop لاننى كنت اريد توضيح حذف عنصر واحد فقط

اما بالنسبة للكود الخاص بك

        Dirt = new int[size][2];
        int newIndex = 0;
        int x = 0;
        int y = 0;
        while (!(Dirt.length == 0)) {

فان المتغير size يتم تعريفة خارج ال while loop ودخل ال loop ربما يتم حذف اكثر من عنصر ولذلك يجب تغير الحجم كل مره

اقترح ان تقومى بعمل method خاصة بعملية الحذف

مثال

public class RemoveFrom2DArray {

	public static void main(String[] args) {
		int[][] Dirt = {{4, 2}, {0, 5}, {7, 1}, {3, 3}};

		while(Dirt.length != 0){
			System.out.println("Removing 4,2");
			Dirt = removeFromArray(Dirt, 4, 2);
			printArray(Dirt);

			System.out.println("Removing 0,5");
			Dirt = removeFromArray(Dirt, 0, 5);
			printArray(Dirt);


			System.out.println("Removing 7,1");
			Dirt = removeFromArray(Dirt, 7, 1);
			printArray(Dirt);

			System.out.println("Removing 3,3");
			Dirt = removeFromArray(Dirt, 3, 3);
			printArray(Dirt);

		}

		System.out.println("I think no more elements in the array");

	}


	public static void printArray(int[][] array){
		System.out.println("After removing");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[0] + "," + array[1]);
		}
		System.out.println("------------------------------------");
	}


	public static int[][] removeFromArray(int[][] array, int elementToBeRemoved, int elementToBeRemoved2){
		int [][] temp = array;
		int size = array.length - 1;
		array = new int[size][2];
		int newIndex = 0;

		for (int i = 0; i < temp.length; i++) {
			int[] oneDimenson = temp;

			if(oneDimenson[0] == elementToBeRemoved && oneDimenson[1] == elementToBeRemoved2)
				continue;
			else{
				array[newIndex][0] = oneDimenson[0];
				array[newIndex][1] = oneDimenson[1];
				newIndex++;
			}
		}
		return array;
	}

}
1
#6
abolkog كتب:

إذا امكن وضع الكود كامل حتى نتمكن من معرفة مكان الخطأ

لكن من الرسالة

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

على ما عتقد انة بسبب تحديد حجم ال array

فى المثال الخاص بى قمت بعمل التالى :

 int size = Dirt.length - 1;

                 Dirt = new int[size][2];

ولكنى لم اقم بوضعها داخل loop لاننى كنت اريد توضيح حذف عنصر واحد فقط

اما بالنسبة للكود الخاص بك

        Dirt = new int[size][2];
        int newIndex = 0;
        int x = 0;
        int y = 0;
        while (!(Dirt.length == 0)) {

فان المتغير size يتم تعريفة خارج ال while loop ودخل ال loop ربما يتم حذف اكثر من عنصر ولذلك يجب تغير الحجم كل مره

اقترح ان تقومى بعمل method خاصة بعملية الحذف

مثال

public class RemoveFrom2DArray {

	public static void main(String[] args) {
		int[][] Dirt = {{4, 2}, {0, 5}, {7, 1}, {3, 3}};

		while(Dirt.length != 0){
			System.out.println("Removing 4,2");
			Dirt = removeFromArray(Dirt, 4, 2);
			printArray(Dirt);

			System.out.println("Removing 0,5");
			Dirt = removeFromArray(Dirt, 0, 5);
			printArray(Dirt);


			System.out.println("Removing 7,1");
			Dirt = removeFromArray(Dirt, 7, 1);
			printArray(Dirt);

			System.out.println("Removing 3,3");
			Dirt = removeFromArray(Dirt, 3, 3);
			printArray(Dirt);

		}

		System.out.println("I think no more elements in the array");

	}


	public static void printArray(int[][] array){
		System.out.println("After removing");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[0] + "," + array[1]);
		}
		System.out.println("------------------------------------");
	}


	public static int[][] removeFromArray(int[][] array, int elementToBeRemoved, int elementToBeRemoved2){
		int [][] temp = array;
		int size = array.length - 1;
		array = new int[size][2];
		int newIndex = 0;

		for (int i = 0; i < temp.length; i++) {
			int[] oneDimenson = temp;

			if(oneDimenson[0] == elementToBeRemoved && oneDimenson[1] == elementToBeRemoved2)
				continue;
			else{
				array[newIndex][0] = oneDimenson[0];
				array[newIndex][1] = oneDimenson[1];
				newIndex++;
			}
		}
		return array;
	}

}

شكر على الرد و التوضيح ...

بس انا اتخلصت من الاري array لانها ثابته و استخدمت method ثانية لحل لمشكلة و الحمد الله انحلت

مشكور اخوي ^_^

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

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

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

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

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