Java 有人回复评论后所做的编辑。我犯了一个错误,所以我在发布后编辑了3秒钟。所以+1对于功能请求,帖子应该定期刷新。你也可以为布尔b:new boolean[]{true,false}编写。当然你是对的。出于某种原因,首先想到的是枚举:您也可以为布尔b编写:新布

Java 有人回复评论后所做的编辑。我犯了一个错误,所以我在发布后编辑了3秒钟。所以+1对于功能请求,帖子应该定期刷新。你也可以为布尔b:new boolean[]{true,false}编写。当然你是对的。出于某种原因,首先想到的是枚举:您也可以为布尔b编写:新布,java,boolean-expression,Java,Boolean Expression,有人回复评论后所做的编辑。我犯了一个错误,所以我在发布后编辑了3秒钟。所以+1对于功能请求,帖子应该定期刷新。你也可以为布尔b:new boolean[]{true,false}编写。当然你是对的。出于某种原因,首先想到的是枚举:您也可以为布尔b编写:新布尔[]{true,false}。当然,您是对的。出于某种原因,首先想到的是枚举:添加多余的括号不会增加任何确定性,它是否增加了可读性是一个品味的问题。请检查:这是一个创建可读性更好的代码的建议。JLS评估顺序:建议代码不要严重依赖于此规范。@s


有人回复评论后所做的编辑。我犯了一个错误,所以我在发布后编辑了3秒钟。所以+1对于功能请求,帖子应该定期刷新。你也可以为布尔b:new boolean[]{true,false}编写。当然你是对的。出于某种原因,首先想到的是枚举:您也可以为布尔b编写:新布尔[]{true,false}。当然,您是对的。出于某种原因,首先想到的是枚举:添加多余的括号不会增加任何确定性,它是否增加了可读性是一个品味的问题。请检查:这是一个创建可读性更好的代码的建议。JLS评估顺序:建议代码不要严重依赖于此规范。@shoetbi:这是嵌入到车辆中的C的编码标准,明确地受到Java中没有出现的问题的影响。第34条规则的动机是C中缺少布尔值,我觉得它一点也不可读@Carlos:JLS声明特别提到了从左到右的评估规则,在副作用和例外情况下。不指定运算符优先级。实际上,每个Java程序都“至关重要”地依赖于Java规范。他们真的不会改变运算符对我们的优先级。也许只有我。我从来没有遇到过这些问题。添加多余的括号并不能增加任何确定性,它是否增加了可读性是一个品味的问题。请检查:这是一个创建可读性更好的代码的建议。JLS评估顺序:建议代码不要严重依赖于此规范。@shoetbi:这是嵌入到车辆中的C的编码标准,明确地受到Java中没有出现的问题的影响。第34条规则的动机是C中缺少布尔值,我觉得它一点也不可读@Carlos:JLS声明特别提到了从左到右的评估规则,在副作用和例外情况下。不指定运算符优先级。实际上,每个Java程序都“至关重要”地依赖于Java规范。他们真的不会改变运算符对我们的优先级。也许只有我。我从来没有这些问题。
package main;

import junit.framework.Assert;

public class Test
{
    enum BOOL
    {
        TRUE(true), FALSE(false);

        private boolean m_val;

        BOOL(boolean val)
        {
            m_val = val;
        }

        public boolean getValue()
        {
            return m_val;
        }
    }

    @org.junit.Test
    public void test1()
    {
        boolean a,b,c;
        for (BOOL boola : BOOL.values())
        {
            for (BOOL boolb : BOOL.values())
            {
                for (BOOL boolc : BOOL.values())
                {
                    a = boola.getValue();
                    b = boolb.getValue();
                    c = boolc.getValue();
                    boolean exp1 = !a || (a && b && c);
                    boolean exp2 = !a || a && b && c;
                    Assert.assertEquals(exp1, exp2);
                }
            }
        }
    }
}
A   B   C   F1  F2 
0   0   0   1   1
0   0   1   1   1
0   1   0   1   1
0   1   1   1   1
1   0   0   0   0
1   0   1   0   0
1   1   0   0   0
1   1   1   1   1
public class TestLogic {
    public static void main(String[] args) {
        for (int i=0;i<8;i++) {
            boolean a=bit(i,3);
            boolean b=bit(i,2);
            boolean c=bit(i,1);
            System.out.println(asZeroOne(a)+asZeroOne(b)+asZeroOne(c)+"\t"+asZeroOne(f1(a,b,c))+"\t"+asZeroOne(f2(a,b,c)));
        }
    }

    static boolean f1(boolean a, boolean b, boolean c) {
        return !a || (a && b && c); 
    }

    static  boolean f2(boolean a, boolean b, boolean c) {
        return !a || a && b && c;
    }

    static  boolean bit(int value, int bitnumber) {
        int bitmask =  (int) Math.pow(2, bitnumber-1);
        return (value & bitmask)>0;
    }
    static String asZeroOne(boolean b) {
        return (b?"1":"0");
    }

}