บทความนี้อธิบายถึงผลิตภัณฑ์คาร์ทีเซียนของ Java ที่ใช้การรวบรวมมิติที่ไม่รู้จักตามการเรียกซ้ำและการวนซ้ำ แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
ผลิตภัณฑ์คาร์ทีเซียนคืออะไร?
ในวิชาคณิตศาสตร์ผลิตภัณฑ์คาร์ทีเซียนของสองชุด x และ y หรือที่รู้จักกันในชื่อผลิตภัณฑ์โดยตรงแสดงเป็น x × y วัตถุแรกเป็นสมาชิกของ x และวัตถุที่สองเป็นหนึ่งในคู่ที่สั่งซื้อที่เป็นไปได้ทั้งหมดของ 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*/ผลิตภัณฑ์ Dimvalue Raw Data* @param ผลผลลัพธ์ข้อมูล* @param เลเยอร์ layer จำนวน dimvalue ของเลเยอร์* @param curlist ผลลัพธ์ของผลิตภัณฑ์คาร์ทีเซียนแต่ละรายการ*/ โมฆะส่วนตัวแบบคงที่ซ้ำ (รายการ <list <string>> dimvalue, รายการ <list <string>> (dimvalue.get (เลเยอร์) .size () == 0) {Recursive (dimvalue, ผลลัพธ์, เลเยอร์ + 1, curlist); } else {สำหรับ (int i = 0; i <dimvalue.get (เลเยอร์) .size (); i ++) {list <string> list = new ArrayList <String> (Curlist); list.add (dimvalue.get (เลเยอร์) .get (i)); เรียกซ้ำ (dimvalue, ผลลัพธ์, เลเยอร์ + 1, รายการ); }}} อื่นถ้า (layer == dimvalue.size () - 1) {ถ้า (dimvalue.get (เลเยอร์) .size () == 0) {result.add (curlist); } else {สำหรับ (int i = 0; i <dimvalue.get (เลเยอร์) .size (); i ++) {list <string> list = new ArrayList <String> (Curlist); list.add (dimvalue.get (เลเยอร์) .get (i)); result.add (รายการ); }}}} / *** ลูปเพื่อใช้ผลิตภัณฑ์คาร์ทีเซียนใน DimValue และผลลัพธ์จะถูกวางไว้ในผลลัพธ์* @param dimvalue ข้อมูลดิบ* @param ผลลัพธ์ผลลัพธ์ผลลัพธ์* / วงจรโมฆะคงที่ส่วนตัว สำหรับ (รายการ <String> รายการ: dimValue) {total *= list.size (); } string [] myResult = สตริงใหม่ [ทั้งหมด]; int itemloopnum = 1; int loopperItem = 1; int ตอนนี้ = 1; สำหรับ (รายการ <String> รายการ: dimValue) {ตอนนี้ *= list.size (); ดัชนี int = 0; int currentsize = list.size (); itemloopnum = ทั้งหมด / ตอนนี้; loopperItem = total / (itemloopnum * currentsize); int myIndex = 0; สำหรับ (สตริงสตริง: รายการ) {สำหรับ (int i = 0; i <loopperItem; i ++) {ถ้า (myindex == list.size ()) {myindex = 0; } สำหรับ (int j = 0; j <itemloopnum; j ++) {myresult [index] = (myresult [index] == null? "": myresult [index] + ",") + list.get (myindex); ดัชนี ++; } MyIndex ++; }}} รายการ <String> stringResult = array.aslist (myResult); สำหรับ (สตริงสตริง: stringResult) {string [] stringArray = string.split (","); result.add (array.aslist (StringArray)); }} / *** รายการโปรแกรม* @param args* / โมฆะคงที่สาธารณะหลัก (สตริง [] args) {list <string> list1 = new ArrayList <String> (); list1.add ("1"); list1.add ("2"); รายการ <String> list2 = arrayList ใหม่ <String> (); list2.add ("a"); list2.add ("B"); รายการ <String> list3 = arrayList ใหม่ <String> (); list3.add ("3"); list3.add ("4"); list3.add ("5"); รายการ <String> list4 = 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 ใหม่ <String> ()); System.out.println ("ใช้ผลิตภัณฑ์คาร์ทีเซียนซ้ำ: ทั้งหมด" + Recursiveresult.size () + "ผลลัพธ์"); สำหรับ (รายการ <string> รายการ: RecursiverEsult) {สำหรับ (สตริงสตริง: รายการ) {system.out.print (สตริง + ""); } system.out.println (); } list <list <String>> circuitResult = new ArrayList <list <String> (); วงจร (Dimvalue, CircuitResult); System.out.println ("ลูปใช้ผลิตภัณฑ์คาร์ทีเซียน: ทั้งหมด" + circuitResult.size () + "ผลลัพธ์"); สำหรับ (รายการ <String> รายการ: CircuitResult) {สำหรับ (สตริงสตริง: รายการ) {system.out.print (สตริง + ""); } 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 C1 B 5 D1 B 5 D1 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 D2 B 5 E LOOP การใช้งานผลิตภัณฑ์คาร์ทีเซียน: ทั้งหมด 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 D1 A 5 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 D2 B 5 E
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน