对于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%确定它是否正确。因此,我想听听第二意见。这会有用吗?
答案 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);}