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  |
    +---+---+---+-----+-----+