笛卡尔积的概念
设A、B为集合。用A中的元素x作为第一元素,B中的元素y作第二元素,构成有序对,所有这样的有序对组成的集合,叫做A
和B的笛卡尔积,记为A×B。
例如,A={0,1,2},B={a,b}
A×B={<0,a>,<0,b>,<1,a>,<1,b>,<2,a>,<2,b>};
B×A={<a,0>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>}。
注意:对于有限集合可以进行多次笛卡尔积运算。
例如,A={0,1,2},B={a,b}
A×B={<0,a>,<0,b>,<1,a>,<1,b>,<2,a>,<2,b>};
B×A={<a,0>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>}。
注意:对于有限集合可以进行多次笛卡尔积运算。
在本程序中,集合用一个ArrayList数据类型来表示,参数al0为参与笛卡尔积运算的A,B等集合的一个数组链表
注意:在实现过程中,出现了一个小错误,特列出来分析一下,当临时变量temp定义在第一个for循环之外时,则在计算所有
集合的笛卡尔积的过程中,temp变量始终存在,但是在每次计算完两个集合的笛卡尔积后,a0=temp的赋值运算,则使得
a0指向temp变量,这就导致在计算两个集合的笛卡尔积的两个for循环出现了死循环,即,由于a0和temp指向同一个对
象,当a0循环一次后,temp也发生变化,导致循环不止。由此问题需要注意:1,临时变量temp其生存期仅在仅在计算两个
笛卡尔积的集合时,记录运算结果期间,从计算开始到结束。2,java对象变量和普通变量的区别,即相当于在参数传递时的
地址传送还是值传送
1716

被折叠的 条评论
为什么被折叠?



