[英]I am unsure why my output is always returning false
我正在尝试在我的代码中执行分配定律,但不知何故,output 总是返回 false。
这是我的 Set class 的示例,其中包含 Union、Intersection 和 Equality 方法:
class Set {
// Instance variable.
private ArrayList<Zodiac> s;
// Default constructor.
public Set() {
this.s = new ArrayList<Zodiac>();
}
// Copy constructor.
public Set(Set otherSet) {
this.s = new ArrayList<Zodiac>(otherSet.s);
for (Zodiac z : otherSet.s) {
s.add(z);
}
}
}
这是我的 distributiveExample 方法:
private static void distributiveExample() {
Set setA1 = new Set(getASet());
Set setB1 = new Set(getASet());
Set setC1 = new Set(getASet());
Set setA2 = new Set(setA1);
Set setB2 = new Set(setB1);
Set setC2 = new Set(setC1);
System.out.printf("We wish to prove: A U (B I C) = (A U B) I (A U C).\n");
System.out.printf("\n");
System.out.printf("Given sets\n");
System.out.printf("\t A = {%s}%n", setA1);
System.out.printf("\t B = {%s}%n", setB1);
System.out.printf("\t C = {%s}%n", setC1);
System.out.printf("\n");
System.out.printf("\t A = {%s}%n", setA2);
System.out.printf("\t B = {%s}%n", setB2);
System.out.printf("\t C = {%s}%n", setC2);
System.out.printf("\n");
setB1.intersection(setC1);
setA1.union(setB1);
System.out.printf("LHS analysis\n");
System.out.printf("\t LHS = {%s}%n", setA1);
setA2.union(setB2);
setA2.union(setC2);
setA2.intersection(setA2);
System.out.printf("RHS analysis\n");
System.out.printf("\t RHS = {%s}%n", setA2);
System.out.printf("\n");
System.out.printf("Conclusion\n");
System.out.printf("\t LHS = RHS is %b%n", setA1.equality(setA2));
System.out.printf("-----------------------------------------\n");
System.out.printf("\n");
}
如果左轴 = 右轴:
在 output 中,LHS = RHS 为真,但不知何故它返回假。 因此,我不确定我在这里做错了什么。
谢谢你。
您可能缺少的是,当您在以下位置使用=
运算符时: Set setA2 = setA;
您没有创建另一个与 setA 相同的 object setA2。
=
运算符在您的代码中所做的是,它允许您让 setA2 指向与 setA 指向的相同引用。
因此,由于我怀疑Set
数据类型是您自定义的,您可以创建一个方法来复制另一个Set
的内容并将它们作为内容提供给您要创建的Set
。
除了上述之外,调试代码的一件好事是在比较发生之前打印您比较的两个对象。 像这样:
System.out.printf("RHS analysis\n");
System.out.printf("\t RHS = {%s}%n", setA2);
/* at this point you might have missed the LHS analysis output
after the modifications */
System.out.printf("LHS analysis\n");
System.out.printf("\t LHS = {%s}%n", setA);
System.out.printf("\n");
System.out.printf("Conclusion\n");
System.out.printf("\t LHS = RHS is %b%n", setA.equality(setA2));
System.out.printf("-----------------------------------------\n");
System.out.printf("\n");
如果上述两种方法都不起作用,那么很可能故障在您创建的 Set.union() 和 Set.intersection() 内部。
在这种情况下,您可以为这两种方法使用名为“Set”的Java.Util.Collections
class 接口扩展:
setA2.addAll(setB2);
setA2.retainAll(setA2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.