繁体   English   中英

我不确定为什么我的 output 总是返回 false

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM