Java 当我减少布尔语句时,是否有特定的顺序?我怎么知道什么时候停止?
减少这样的语句时:Java 当我减少布尔语句时,是否有特定的顺序?我怎么知道什么时候停止?,java,boolean,logic,Java,Boolean,Logic,减少这样的语句时: !(n || p)|| p &&(n || q) 我首先看NOT符号,然后使用德摩根定律进行简化 !n && !p || p &&(n || q) 在这一点上,看起来这是尽可能减少的 我不能在p&&(n | | q)部分使用任何定律 我不能在上使用更多的法律!n&&!p零件 因为和出现在或之前,我假设我不能开始按顺序减少其他部分,例如!p | | p变为真 是否可以进一步减少,而我只是看不到什么?我不确定一般减少的具体算法,
!(n || p)|| p &&(n || q)
我首先看NOT符号,然后使用德摩根定律进行简化
!n && !p || p &&(n || q)
在这一点上,看起来这是尽可能减少的
我不能在p&&(n | | q)
部分使用任何定律
我不能在上使用更多的法律!n&&!p
零件
因为和出现在或之前,我假设我不能开始按顺序减少其他部分,例如!p | | p
变为真
是否可以进一步减少,而我只是看不到什么?我不确定一般减少的具体算法,但在这种情况下,可以使用其他属性进一步减少:
(!n && !p) || (p && (n || q))
(!n && !p) || ((p && n) || (p && q))
((!n && !p) || (n && p)) || (p && q)
(!n&&!p)| |(n&&p)
相当于n==p
:
(n == p) || (p && q)
p
可以被分发,这开辟了其他可能性。步骤4是一个常见的标识,但我不知道它是否有名称
下面是一个小程序,它显示了真值表实际上是相同的:
class Example {
static boolean f(boolean n, boolean p, boolean q) {
return !(n || p) || p && (n || q);
}
static boolean g(boolean n, boolean p, boolean q) {
return (n == p) || (p && q);
}
public static void main(String[] args) {
System.out.println("+---+---+---+-----+-----+");
System.out.println("| n | p | q | f() | g() |");
System.out.println("+---+---+---+-----+-----+");
for (int i = 0b000; i <= 0b111; ++i) {
boolean n = (i & 0b100) != 0;
boolean p = (i & 0b010) != 0;
boolean q = (i & 0b001) != 0;
boolean f = f(n, p, q);
boolean g = g(n, p, q);
System.out.printf("| %s | %s | %s | %s | %s |%n",
ch(n), ch(p), ch(q), ch(f), ch(g));
}
System.out.println("+---+---+---+-----+-----+");
}
static char ch(boolean b) { return b ? 'T' : 'F'; }
}
查看Java中的操作顺序以获取帮助我只是想象在一些真实代码中看到这一点,我的朋友我会讨厌它。。。这个问题很好,你优化的目的是什么?你想要最简洁的形式吗?例如,请看。@lexicore我教计算机科学,我们有一些工作表,在这些工作表中,我们需要使用定律来简化布尔语句。我找不到钥匙,所以我又在手工操作了。我也有一年没有这样做了,所以我有点生疏了。
+---+---+---+-----+-----+
| n | p | q | f() | g() |
+---+---+---+-----+-----+
| F | F | F | T | T |
| F | F | T | T | T |
| F | T | F | F | F |
| F | T | T | T | T |
| T | F | F | F | F |
| T | F | T | F | F |
| T | T | F | T | T |
| T | T | T | T | T |
+---+---+---+-----+-----+