java - 我不确定为什么我的输出总是返回 false
问题描述
我正在尝试在我的代码中执行分配法则,但不知何故,输出总是返回 false。
这是我的 Set 类的示例,其中包含 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");
}
如果左轴 = 右轴:
在输出中,LHS = RHS 为真,但不知何故它返回假。因此,我不确定我在这里做错了什么。
谢谢你。
解决方案
您可能缺少的是,当您使用=
运算符时:Set setA2 = setA;
您不会创建另一个与 setA 相同的对象 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() 内部。
在这种情况下,您可以Java.Util.Collections
为这两种方法使用名为“Set”的类接口扩展:
- 联盟:
setA2.addAll(setB2);
- 路口:
setA2.retainAll(setA2);
推荐阅读
- hide - 防止网格被渲染
- javascript - 影响 ng-class 的 Ng-click
- firebase - 对于 Firebase 应用程序分发,发行说明的最大大小是多少?
- python - 如何读取然后更新 json 文件?
- python - 如何使用共享 url 和命令行从 Google Colab 获取“原始”ipynb 文件?
- twilio - 收到 32011 警告后转接来电
- batch-file - 更改桌面背景的批处理文件仅偶尔或在垃圾邮件打开批处理后有效。我想帮助它立即改变
- google-sheets-formula - 过滤器和数组公式
- python - 使用一个数据帧的索引访问另一个数据帧的行时出错
- typescript - 键入复合类型保护 - 从类型保护推断/继承属性到其调用者