Java - 将三值逻辑表示为数据类型

时间:2014-05-19 13:49:16

标签: java logic

对于Universtity的讲座,我必须在Java中编写一个三值逻辑(真,假,未知)。到目前为止我有这个:

public class TriLogic {


    public enum Logic {
        TRUE, FALSE, UNKNOWN
    }


    public Logic Disj(Logic op1, Logic op2){

    }

    public Logic Neg (Logic op1){

    }

    public Logic Conj(Logic op1,Logic op2){

    }
}

注意:在函数中实际实现逻辑不在我们的任务范围内。

这一类在理论上应该用3,否定,分离和结合的方法来表示三值逻辑。然而,我并非100%确定它是否正确。因此,我想听听第二意见。这会有用吗?

2 个答案:

答案 0 :(得分:2)

它会起作用,但它并不完全正确'。您的TriLogic类应该有一个final Logic不可变成员变量,并且这些方法应该只有一个参数;每个操作的结果将是TriLogic的变量与methods参数的组合。 (Neg将是对变量的简单否定)。这将允许你做

Logic false = true.Neg();

此类的构造函数留给读者练习。

答案 1 :(得分:2)

您可以做的一件事就是取消整个TriLogic课程,并将您的方法放在enum本身:

public enum Logic {
    TRUE {
        @Override
        public Logic disj(Logic op) {}

        @Override
        public Logic neg() {}

        @Override
        public Logic conj(Logic op) {}
    },
    FALSE {
        @Override
        public Logic disj(Logic op) {}

        @Override
        public Logic neg() {}

        @Override
        public Logic conj(Logic op) {}
    },
    UNKNOWN {
        @Override
        public Logic disj(Logic op) {}

        @Override
        public Logic neg() {}

        @Override
        public Logic conj(Logic op) {}
    };

    public abstract Logic disj(Logic op);

    public abstract Logic neg();

    public abstract Logic conj(Logic op);

}

是的,打字更多。但它确实有效。我实际上更喜欢这个,因为你不需要对逻辑方法执行if-else检查和/或切换,并且使用它也可能更方便(例如,TRUE.neg().conj(FALSE);)。你的来电。您还可以添加静态方法来操作两个Logic值,但这是可选的。事实上,现在我考虑一下,静态方法真的易于实现:

public static Logic disj(Logic op1, Logic op2) { return op1.disj(op2);}