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

امكانية انشاء مصفوفة عناعرها ليست من فصيلة واحدة

بدأه لونه2010 في 3 ديسمبر 2008 · 11 رد · 1,189 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

هل من الممكن في الجافا انشاء

مصفوفة في الجافا

عناصرها من فصائل

classes

مختلفة؟

#2

في الجافا الكل مشتق من الفئة كائن Object

حتى لو كان أي شيء

لذلك قومي بعمل المصفوفة من نوع كائن

المشكلة تكمن في أنك لن تستطيعي استخدام إلا الدوال التي موجودة في الفئة كائن

أو ستضطري لاستخدام عملية تحويل قسري casting وهي مكلفة

مع استخدام العملية تابع إلى instance of

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

حياكم الله ..

الرد المباشر على سؤالك هو (لا) ... لأن المصفوفة في النهاية لابد ان تحتوي على عناصر من نفس النوع ...

ولكن هذه القاعدة ممكن التحايل عليها ... و لكن لان تحصلي على نتيجة كاملة ...

كطريقة اولى ... كما قال مشرفنا الكريم علاء .. ممكن عمل ذلك بإنشاء مصفوفة من Object على إعتبار ان كل الكائنات في النهاية من نوع Object ... الخ

ايضاً هناك حالة اخرى تسمح لكي بعمل objects مختلف في مصفوفة .. لكن لابد ان يكون بينها علاقة relationships و ان تكون المصفوفة من نوع الكلاس الاب .. خذي هذا المثال :

لدينا الكلاس Mammal (يمثل الثديات) :

public class Mammal {

	protected String hairColor;

	public Mammal () {
	hairColor = "unknown";
	}

	public Mammal (String hc) {
	hairColor = hc;
	}

	public String getHairColor() {
		return hairColor;
	}

	public String toString() {
	return "I am a mammal with " + hairColor + " hair color.";
	}
}

و هناك كلاسين اخرين يرثوا الكلاس Mammal و هم الـ Human و الـ Cat

public class Human extends Mammal {

	protected long ic;

	public Human (long s) {
	ic = s;
	}

	public long getIC() {
	return ic;
	}


	public String toString() {
	return "I am a human with " + hairColor + " hair color and IC " +ic;
	}

}

public class Cat extends Mammal {

	protected int tagNumber;

	public Cat (int tn) {
		tagNumber = tn;
		if (hairColor.equals("unknown"))
		   hairColor = "brown";
	}


	public int getTagNumber() {
		return tagNumber;
	}

	public String toString() {
	return "I am a cat with " + hairColor + " hair color and tag number " +tagNumber;
	}
}

بهذا الشكل ممكن ان تعملي التعريف التالي :

Mammal [] human = new Human[SIZE];

و ايضاً لديكي هذا المثال الكامل :

public class Demo3 {

	public static void main(String[] args) {

		final int SIZE = 5;

		Mammal[] mammal = new Mammal[SIZE];

		for (int i = 0; i < SIZE; i++) {
			int species = (int) (Math.random() * 3);
			if (species == 0) {
				mammal = new Human(85030402 + i);
			} else if (species == 1) {
				mammal = new Cat(501 + i);
			} else {
				mammal = new Mammal("red");
			}
		}

		for (int i = 0; i < SIZE; i++) {
			System.out.println(mammal.toString());
		}
	}
}

و في Demo3 عملنا مصفوفة تحتوي بشكل عشوائي على Cat او Human او Mammal

و هذا طبعاًً شكل من اشكال الـ polymorphism ...

لكن المعنى الحقيقي هو ان جميع هذا الـ references في الاخير تشير الى كائن نوعه Mammal و لكن ان عرفته مع Cat ممكن فقط ان يستدعي الدالة البانية في الـ Cat و ليس اي دالة اخرى داخل الكلاس Cat (و نفس الامر مع Human)

------------------------------------

الامثلة في هذا الرد منقولة طبعاً ... و اعتذر على الرد الطويل ... لكن زارتني فجأة رغبة للكتابة :)

بالتوفيق ...

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#4

امممممم

اتوقع هناك شيء اسمه vectors مشابهه للمصفوفات لكن يستطيع ان يحتوي على انواع مختلفة؟

#5

شكراً أختي بنت اليمن على التوضيح

أخ مجلد جديد

نفس النقطة

يجب أن تستخدم casting في النهاية

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6

شكرا جزيلا على ردودكم ا لقيمة

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

لم أستوعب ؟!!

أشرح لكم مثالي :

أنا لدي 20 فصيلة كل واحدة تحتوي على مجموعة كلمات خاصة بها(array of string)

my i/p:

array of sting

المطلوب أقارن المدخل i/p( بمجموعة الكلمات الخاصة بكل فصيلة من العشرين فصيلة

اريد بدل ما استخدم نفس الكود للمقارنه في كل كائن من فصيلة

يكون الكود مكتوب مرة واحدة داخل

loop in array of different object..

مالمقصود ب Polymorphism

و vectors ؟

#7
اقتباس
مالمقصود ب Polymorphism

و vectors ؟

الأولى واضحه من أسمها معناها تعدد الأشكال

أما الثانيه أعتقد يستخدموها في الـشبكات العصبيه ANN وأعتقد الـvectors هي المصفوفه اللي تمثل الخلايا أو حاجه زي كذا والله أعلم عادنا ماوصلنا لها <== ياخي بالله كل تبن وأسكت :)

على العموم أخواني وأخواتي الأعزاء السلام عليكم ورحمة اله وبركاته <== الأخ داخل يقدم برنامج :)

أنا عندي سؤال صغير يفحط داخل فؤادي :

كيف أقدر أعرف مصفوفه أحاديه من نوع object كل خليه فيها تمثل 2d array أو 3d كذلك من نوع object

يعني بإختصار مصفوفه متداخله

لاتقولوا لي لايمكن , هذه بالفعل موجوده وتستخدم في التشفير ويستخدموها الهكرز في إنشاء الtrojans

أتمنى تفيدوني <== حاسته التاسعه تقول أن الإجابه بتكون (( راجع موضوع الأخت زينب ولا الأخ جعفر :) ))

وكل عام وأنتم بألف صحه وعافيه


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#8

أخت لونه2010 ، كما ذكر الشباب ، لكي تضع الكائنات مع بعض في مصفوفه ، يجب أن يكونوا من نفس النوع ، وفي حالتك تريد أن تدخل كائنات مختلفه في مصفوفه ، وبالتالى أما تكون المصفوفه من نوع Object (لأن جميع الكلاسات في جافا ترث من هذا الكلاس) ولكن ستضطر كما بين أخ علاء عمل Cast بعد معرفه النوع لكي تتعامل معه ،، الحل الأخر كما بينت أختي بنت اليمن وهو أن تكون هناك علاقه بين الكلاسات (جميعهم يرث من كلاس واحد) وتقوم بعمل مصفوفه من الكائن الأب ، ومن ثم تكون القيم لهذه المصفوفه هي الكائنات التي تريد أدخالها (والتي جميعها ترث الأب) ، الأن تستطيع التعامل مع هذه الكائنات المختلفه كما لو كنت تتعامل مع الكلاس الأب وستيم بشكل تلقايئ التعامل مع الكلاس المعين والذي لا تعرفه أنت وقت التشغيل ، هذا ما يعرف بتعدد الأوجهه Polymorphsim . راجع رد أختي بنت اليمن ، وراجع أيضا خاصيه البحث في القسم للمزيد :) .

بالنسبه للvectors ، هي يمكن أن تعتبرها مصفوفه أيضا ولكنها قابله للتوسعه ،، ولكن لن تحل لك مشكلتك حيث يجب أن تحدد Vector من أي نوع (Integer أو Student أو Object ..) .. وهنا سوف تعود لنفس النقطه كما في المصفوفه العاديه و سوف تستخدم نفس الحلين الذين تم ذكرهم أعلاه ،،

غير ذلك ، عليك بتوضيح مشكلتك بشكل جيد ، حتى تحصل على حلول تفى بالغرض .. فوضح أكثر بارك الله فيك ..

أخي الكريم M.Allaw ،، المصفوفه الثنائيه 2D ، هي مصفوفه وكل عنصر من عناصرها هي مصفوفه أيضا .. المصفوفه 3D هي مصفوفه كل عنصر من عناصرها هي مصفوفه من 2D (وكل عنصر من عناصر ال2D هي مصفوفه أيضا) ، راجع الدروس في القسم :P

بالتوفيق جميعا ،،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#9

أهلا حبيبي وجدي كيف حالك؟ كل عام وأنت بخير :)

أنا قصدي المصفوفه تكون زي كذا :

post-162369-1228513016_thumb.png

تمثل مصفوفه ثنائيه داخل مصفوفه أحاديه وتتعامل مع المصفوفه الثنائيه كأنها عنصر عادي من عناصر المصفوفه الأحاديه وتحتاج إلى 3 حلقات for

للوصول لعناصر المصفوفه الثنائيه

بس السؤال هو كيف الصيغه أو الـsyntax اللازم

اللي أحتاجه لتعريفها وكيف أوصل لعناصر الـمصفوفه الثنائيه؟

مثلاً عشان أعرف مصفوفه زي كذا أسوي هذه الطريقه :

Object[[][]] objectName

ولا كيف؟ <== سؤال يبطح نفسه بقوه :)

ثانياً أيش رأيك برسمي؟ بذمتك ماأنافس ليوناردوا دافنشي؟ -_-

تم تعديل هذه المشاركة بواسطة M.Allaw في 6 ديسمبر 2008 في 08:18


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#10

خلاص اعتزل البرمجه وحول للرسم :) .

هل هذا يفي بالغرض :

// Access 3D Array

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

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

اذا لم ينفع ، أو لديك أفكار ما ، يمكنك فتح موضوع جديد -باسم واضح- حتى لا نخرب على الأخت لونه ، وأيضا يساعدك من لديه تجارب بالموضوع ولم يدخل هنا ..

بالتوفيق :) ، وكل عام وأنت بخير وجميع الأعضاء الكرام والأمه الأسلاميه أيضا .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#11

مشكوووووووووووووووووووووووووووور حبيب قلبي وجدي ياخي مدري كيف أشكرك , لوكان عندي بنات كان زوجتك بس أنتظر لي 40 سنه بالكثير لما أتزوج وأخلف :lol:

أكيد يفي بالغرض 100% , ربي يزيدك علم 10 أضعاف إلى علمك أخي العزيز وإن شاء الله نخدمك يوم عرسك :)

وبالنسبه للموضوع خفت أنزله يقولوا لي مكرر ولا مخالف ومدري كيف فقلت أجله وجع الراس وخليني أبطح سؤالي هنا وأنا قلبي بارد :)

في أمان الرحمن

تم تعديل هذه المشاركة بواسطة M.Allaw في 6 ديسمبر 2008 في 08:27


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#12

شكرا جزبلا

استفدت من كل ما دار في موضوعي..

وقررت اجعل للعشرين فصيلة فصيلة ام ترث منها لانها كلها بها نفس functions

كل عام والأمة الاسلامية بخير..

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

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

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

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

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