السلام عليكــم ورحمـة الله وبركاتــه
هل من الممكن في الجافا انشاء
مصفوفة في الجافا
عناصرها من فصائل
classes
مختلفة؟
السلام عليكــم ورحمـة الله وبركاتــه
هل من الممكن في الجافا انشاء
مصفوفة في الجافا
عناصرها من فصائل
classes
مختلفة؟
في الجافا الكل مشتق من الفئة كائن Object
حتى لو كان أي شيء
لذلك قومي بعمل المصفوفة من نوع كائن
المشكلة تكمن في أنك لن تستطيعي استخدام إلا الدوال التي موجودة في الفئة كائن
أو ستضطري لاستخدام عملية تحويل قسري casting وهي مكلفة
مع استخدام العملية تابع إلى instance of
تحياتي
حياكم الله ..
الرد المباشر على سؤالك هو (لا) ... لأن المصفوفة في النهاية لابد ان تحتوي على عناصر من نفس النوع ...
ولكن هذه القاعدة ممكن التحايل عليها ... و لكن لان تحصلي على نتيجة كاملة ...
كطريقة اولى ... كما قال مشرفنا الكريم علاء .. ممكن عمل ذلك بإنشاء مصفوفة من 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)
------------------------------------
الامثلة في هذا الرد منقولة طبعاً ... و اعتذر على الرد الطويل ... لكن زارتني فجأة رغبة للكتابة :)
بالتوفيق ...
لا اله الا الله .. محمد رسول الله
(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)
يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين
امممممم
اتوقع هناك شيء اسمه vectors مشابهه للمصفوفات لكن يستطيع ان يحتوي على انواع مختلفة؟
شكرا جزيلا على ردودكم ا لقيمة
خلاصة القول انه لا استطيع وضعها في مصفوفة واحدة الا اذا كانوا يرثوا من فصيلة واحدة؟
لم أستوعب ؟!!
أشرح لكم مثالي :
أنا لدي 20 فصيلة كل واحدة تحتوي على مجموعة كلمات خاصة بها(array of string)
my i/p:
array of sting
المطلوب أقارن المدخل i/p( بمجموعة الكلمات الخاصة بكل فصيلة من العشرين فصيلة
اريد بدل ما استخدم نفس الكود للمقارنه في كل كائن من فصيلة
يكون الكود مكتوب مرة واحدة داخل
loop in array of different object..
مالمقصود ب Polymorphism
و vectors ؟
اقتباسمالمقصود ب Polymorphismو vectors ؟
الأولى واضحه من أسمها معناها تعدد الأشكال
أما الثانيه أعتقد يستخدموها في الـشبكات العصبيه ANN وأعتقد الـvectors هي المصفوفه اللي تمثل الخلايا أو حاجه زي كذا والله أعلم عادنا ماوصلنا لها <== ياخي بالله كل تبن وأسكت :)
على العموم أخواني وأخواتي الأعزاء السلام عليكم ورحمة اله وبركاته <== الأخ داخل يقدم برنامج :)
أنا عندي سؤال صغير يفحط داخل فؤادي :
كيف أقدر أعرف مصفوفه أحاديه من نوع object كل خليه فيها تمثل 2d array أو 3d كذلك من نوع object
يعني بإختصار مصفوفه متداخله
لاتقولوا لي لايمكن , هذه بالفعل موجوده وتستخدم في التشفير ويستخدموها الهكرز في إنشاء الtrojans
أتمنى تفيدوني <== حاسته التاسعه تقول أن الإجابه بتكون (( راجع موضوع الأخت زينب ولا الأخ جعفر :) ))
وكل عام وأنتم بألف صحه وعافيه
أخت لونه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
أهلا حبيبي وجدي كيف حالك؟ كل عام وأنت بخير :)
أنا قصدي المصفوفه تكون زي كذا :
تمثل مصفوفه ثنائيه داخل مصفوفه أحاديه وتتعامل مع المصفوفه الثنائيه كأنها عنصر عادي من عناصر المصفوفه الأحاديه وتحتاج إلى 3 حلقات for
للوصول لعناصر المصفوفه الثنائيه
بس السؤال هو كيف الصيغه أو الـsyntax اللازم
اللي أحتاجه لتعريفها وكيف أوصل لعناصر الـمصفوفه الثنائيه؟
مثلاً عشان أعرف مصفوفه زي كذا أسوي هذه الطريقه :
Object[[][]] objectName
ولا كيف؟ <== سؤال يبطح نفسه بقوه :)
ثانياً أيش رأيك برسمي؟ بذمتك ماأنافس ليوناردوا دافنشي؟ -_-
تم تعديل هذه المشاركة بواسطة M.Allaw في 6 ديسمبر 2008 في 08:18
خلاص اعتزل البرمجه وحول للرسم :) .
هل هذا يفي بالغرض :
// 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
مشكوووووووووووووووووووووووووووور حبيب قلبي وجدي ياخي مدري كيف أشكرك , لوكان عندي بنات كان زوجتك بس أنتظر لي 40 سنه بالكثير لما أتزوج وأخلف :lol:
أكيد يفي بالغرض 100% , ربي يزيدك علم 10 أضعاف إلى علمك أخي العزيز وإن شاء الله نخدمك يوم عرسك :)
وبالنسبه للموضوع خفت أنزله يقولوا لي مكرر ولا مخالف ومدري كيف فقلت أجله وجع الراس وخليني أبطح سؤالي هنا وأنا قلبي بارد :)
في أمان الرحمن
تم تعديل هذه المشاركة بواسطة M.Allaw في 6 ديسمبر 2008 في 08:27
شكرا جزبلا
استفدت من كل ما دار في موضوعي..
وقررت اجعل للعشرين فصيلة فصيلة ام ترث منها لانها كلها بها نفس functions
كل عام والأمة الاسلامية بخير..
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…