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

نسخ مصفوفة ثنائية البعد داخل ArrayList

بدأه vector_ever في 28 يوليو 2011 · 3 رد · 858 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لنفرض انه لدينا مصفوفة واردنا نسخها وتخزينها داخل ArrayList

int [] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};

ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 0 ; i > array.length; i++){

list.add(array;
}

طيب هاي بسيطة لكن ماذا لو كانت المصفوفة ثنائية البعد كما يلي

int [ ] array = 
{1, 2, 3, 4, 5, 6, 7, 8, 9},
{9, 2, 4, 1, 6, 7, 8, 3, 5},
{1, 3, 5, 7,9, 2, 4, 6, 8};
{2,4, 6, 8, 1, 3, 5, 7, 9{;

في هذه الحالة كيف سيتم تخزين قيم هذه المصفوفة داخل ArrayList بشرط عند اعادة نسخ قيم الـ ArrayList داخل مصفوفة اخرى تعطيني نفس شكل المصفوفة الاولى array ونفس القيم يعني ثنائة البعد

انا حاولت صراحة كما يلي

for (int i = 0 ; i > array.length; i++){
for (int j = 0 ; j > array[0].length; j++){
list.add(array[j];
}
}

لكن ما لاحظته ان القيم لبمخزنة تفقد ترتيبها كمصفوفة ثنائية البعد وعند نسخها لمصفوفة اخرى تنسخ كمصفوفة احادية البعد

فما الحل؟

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


 


 


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


 


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


#2

انا مش عارف ايه الغرض لكن تفضل

import java.util.ArrayList;

public class ArrayListTwoDimentions {

	public static void main(String[] args) {
		int[][] array = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
				{ 9, 2, 4, 1, 6, 7, 8, 3, 5 }, { 1, 3, 5, 7, 9, 2, 4, 6, 8 },
				{ 2, 4, 6, 8, 1, 3, 5, 7, 9 } };

		ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

		for (int i = 0; i < array.length; i++) {
			ArrayList<Integer> integers = new ArrayList<Integer>();
			for (int j = 0; j < array[0].length; j++) {
				integers.add(array[j]);
			}
			list.add(integers);
		}

		for (int i = 0; i < list.size(); i++) {
			ArrayList<Integer> l = list.get(i);
			System.out.print("{ ");
			for (Integer integer : l) {
				System.out.print(integer.intValue()  + " , ");
			}
			System.out.println(" }");
		}
	}
}
2

Software Developer
Mahmoudkelany.com


 

#3

انا كتبت الكود بسرعه

لكن فكرت فيه بعدها ( كانت الكهرباء مقطوعه )

المهم

لقيت ان المفروض يكون الصف ثابت

فبالتالى يمكن وضعه مصفوفه احادية بطول عدد العناصر

import java.util.ArrayList;

public class ArrayListTwoDimentions {

	public static void main(String[] args) {
		Integer[][] array = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
				{ 9, 2, 4, 1, 6, 7, 8, 3, 5 }, { 1, 3, 5, 7, 9, 2, 4, 6, 8 },
				{ 2, 4, 6, 8, 1, 3, 5, 7, 9 } };

		ArrayList<Integer[]> list = new ArrayList<Integer[]>();

		for (int i = 0; i < array.length; i++) {
			list.add(array);
		}

		for (int i = 0; i < list.size(); i++) {
			Integer[] l = list.get(i);
			System.out.print("{ ");
			for (Integer integer : l) {
				System.out.print(integer.intValue() + " , ");
			}
			System.out.println(" }");
		}
	}
}
1

Software Developer
Mahmoudkelany.com


 

#4

يمكنك نسخ المصفوفة ثنائية البعد إلى ArrayList بدون استخدام الـ loop:

List<Integer[]> list = new ArrayList<Integer[]>(Arrays.asList(array));

وللحصول مرة أخرى على المصفوفة ثنائية البعد:

Integer[][] newArray = list.toArray(new Integer[0][]);

وبنفس الطريقة يمكنك نسخ المصفوفة أحادية البعد إلى ArrayList:

List<Integer> list = new ArrayList<Integer>(Arrays.asList(array));

وللحصول على المصفوفة:

Integer[] newArray = list.toArray(new Integer[0]);

طبعاً سيكون هنالك loop ولكن سيتم داخلياً (داخل الـ compiler على ما أعتقد)

تم تعديل هذه المشاركة بواسطة Eng.Fouad في 29 يوليو 2011 في 04:06

2
597657.png

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