تصف هذه المقالة المنتج الديكارتي لـ Java الذي ينفذ مجموعة من الأبعاد غير المعروفة على أساس العودية والحلقة. شاركه للرجوع إليه ، على النحو التالي:
ما هو المنتج الديكارت؟
في الرياضيات ، يتم التعبير عن المنتج الديكارتي لمجموعتين x و y ، المعروف أيضًا باسم المنتج المباشر ، على أنه x × y ، والكائن الأول هو عضو في x والكائن الثاني هو واحد من جميع أزواج y. الممكنة الممكنة الممكنة من Y.
على افتراض أن تعيين A = {A ، B} ومعرفة B = {0،1،2} ، فإن المنتج الديكارتي للمجموعتين هو {(A ، 0) ، (A ، 1) ، (A ، 2) ، (B ، 0) ، (B ، 1) ، (B ، 2)}.
كيفية استخدام خوارزميات البرنامج لتنفيذ المنتج الديكارت؟
إذا كان عدد المجموعات معروفة قبل البرمجة ، فيمكن الحصول على المنتج الديكارت من خلال حلقات متعددة من البرنامج. ولكن إذا كنت لا تعرف عدد المجموعات قبل البرمجة ، فكيف يمكنك الحصول على المنتج الديكارتي؟ على سبيل المثال ، تمثل المجموعة List < List<String>> list عدد القوائم قبل البرمجة غير معروف. يستخدم الرمز التالي طريقتين من العودية والحلقة لتنفيذ المنتج الديكارت لمجموعات الأبعاد غير المعروفة:
استيراد java.util.arraylist ؛ استيراد java.util.arrays ؛ استيراد java.util.list ؛/*** طريقتان لتحقيق المنتج الديكارتي لمجموعات الأبعاد غير المعروفة* التي تم إنشاؤها في 2015-05-22* author luweijie*/public class descartes DimValue RAW Data* param result result data* param طبقة dimvalue عدد الطبقات* param curlist نتيجة كل منتج كارتيان*/ خاص بالفراغ الثابت المتكرر (list <string >> dimvalue ، list <string> (dimvalue.get (layer) .size () == 0) {متكرر (dimvalue ، النتيجة ، الطبقة + 1 ، curlist) ؛ } else {for (int i = 0 ؛ i <dimvalue.get (layer) .size () ؛ i ++) {list <string> list = new ArrayList <string> (curlist) ؛ list.add (dimvalue.get (layer) .get (i)) ؛ العودية (dimvalue ، النتيجة ، الطبقة + 1 ، قائمة) ؛ }}} آخر إذا (layer == dimvalue.size () - 1) {if (dimvalue.get (layer) .size () == 0) {result.add (curlist) ؛ } else {for (int i = 0 ؛ i <dimvalue.get (layer) .size () ؛ i ++) {list <string> list = new ArrayList <string> (curlist) ؛ list.add (dimvalue.get (layer) .get (i)) ؛ النتيجة. add (قائمة) ؛ }}}} / *** حلقة لتنفيذ المنتج الديكارتي في dimvalue ، ويتم وضع النتيجة في النتيجة* param dimvalue data* @param نتائج النتائج* / دائرة الفراغ الثابتة الخاصة (قائمة <string >> dimvalue ، قائمة <string> stot) {int total = 1 ؛ لـ (قائمة <Tring> قائمة: dimValue) {total *= list.size () ؛ } string [] myresult = new string [total] ؛ int itemLoopNum = 1 ؛ int loopperitem = 1 ؛ int الآن = 1 ؛ لـ (قائمة <Tring> قائمة: dimValue) {now *= list.size () ؛ int index = 0 ؛ int التيارت = list.size () ؛ itemLoopNum = total / now ؛ loopperItem = total / (itemLoopNum * turrentize) ؛ int myindex = 0 ؛ لـ (سلسلة السلسلة: قائمة) {for (int i = 0 ؛ i <loopperItem ؛ i ++) {if (myindex == list.size ()) {myindex = 0 ؛ } لـ (int j = 0 ؛ j <itemLoopNum ؛ j ++) {myresult [index] = (myresult [index] == null؟ فهرس ++ ؛ } myindex ++ ؛ }}} list <string> stringResult = Arrays.aslist (myresult) ؛ لـ (سلسلة السلسلة: StringResult) {String [] StringArray = string.split ("،") ؛ result.add (arrays.aslist (StringArray)) ؛ }} / *** إدخال البرنامج* param args* / public static void main (string [] args) {list <string> list1 = new ArrayList <String> () ؛ list1.add ("1") ؛ list1.add ("2") ؛ قائمة <Tring> list2 = new ArrayList <String> () ؛ list2.add ("a") ؛ list2.add ("b") ؛ قائمة <Tring> list3 = new ArrayList <String> () ؛ list3.add ("3") ؛ list3.add ("4") ؛ list3.add ("5") ؛ قائمة <Tring> list4 = new ArrayList <String> () ؛ list4.add ("C") ؛ list4.add ("D") ؛ list4.add ("e") ؛ قائمة <list <string >> dimValue = new ArrayList <list <string> () ؛ dimvalue.add (list1) ؛ dimvalue.add (list2) ؛ dimvalue.add (list3) ؛ dimvalue.add (list4) ؛ قائمة <list <string >> recursiveresult = new ArrayList <list <string> () ؛ // تنفيذ المنتج الديكارت العودية بشكل متكرر (dimvalue ، recursiveresult ، 0 ، ArrayList New ArrayList <String> ()) ؛ System.out.println ("يتنفس بشكل متكرر للمنتج الديكارتي: Total" + Recursiveresult.size () + "النتائج") ؛ لـ (قائمة <Tring> قائمة: Recursiveresult) {for (سلسلة السلسلة: قائمة) {system.out.print (string + "") ؛ } system.out.println () ؛ } List <list <string >> circuterResult = new ArrayList <list <string >> () ؛ الدائرة (dimvalue ، الدائرة) ؛ system.out.println ("حلقة تنفذ المنتج الديكارتي: TOTAL" + CircuterResult.size () + "result") ؛ لـ (قائمة <Tring> قائمة: CircuterResult) {for (سلسلة السلسلة: قائمة) {system.out.print (string + "") ؛ } system.out.println () ؛ }}}نتيجة الإخراج هي:
تنفيذ المنتج الديكارت بشكل متكرر: ما مجموعه 36 نتائج 1 A 3 C1 A 3 D1 A 3 E1 A 4 C1 A 4 D1 A 4 E1 A 5 C1 A 5 D1 A 5 E1 B 3 C1 B 3 D1 B 3 E1 B 4 C1 B 4 D1 B 4 E1 B 5 B 5 D1 B 5 E2 A 3 C2 5 D2 A 5 E2 B 3 C2 B 3 D2 B 3 E2 B 4 C2 B 4 D2 B 4 E2 B 5 C2 B 5 D2 B 5 E LOOP تنفيذ المنتج الديكارت: ما مجموعه 36 REPORTERS1 A 3 C1 A 3 D1 A 3 E1 A 4 C1 A 4 D1 A 4 A 5 C1 B 5 C1 B 5 D1 B 5 E2 A 3 C2 A 3 D2 A 3 E2 A 4 C2 A 4 D2 A 4 E2 A 5 C2 A 5 D2 A 5 E2 B 3 C2 B 3 D2 B 3 E2 B 4 C2 B 4 D2 B 4 E2 B 5 C2 B 5 E
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.