2

大家我想知道是否有一种简单的方法可以将这个Java程序的真假值转换为1和0而不需要做太多的体力劳动?我认为添加数据类型“字节”并具有两个单独的变量值 1 和 0 并手动将它们输入到代码中就可以了,但是,有没有更简单的方法?

public class LogicalOpTable1 {

public static void main(String args[]) {

        boolean p, q;


        System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");

        p = true; q = true;
        System.out.print(p + "\t" + q +"\t");
        System.out.print((p&q) + "\t" + (p|q) + "\t");
        System.out.println((p^q) + "\t" + (!p));

        p = true; q = false;
        System.out.print(p + "\t" + q + "\t");
        System.out.print((p&q) + "\t" + (p|q) + "\t");
        System.out.println((p^q) + "\t" + (!p));

        p = false; q = true;
        System.out.print(p + "\t" + q + "\t");
        System.out.print((p&q) + "\t" + (p|q) + "\t");
        System.out.println((p^q) + "\t" + (!p));

        p = false; q = false;
        System.out.print(p + "\t" + q + "\t");
        System.out.print((p&q) + "\t" + (p|q) + "\t");
        System.out.println((p^q) + "\t" + (!p));
    }

}
4

6 回答 6

2

你有很多代码重复。永远不要复制粘贴,永远创建方法。这将使您的代码具有可读性和可维护性。即使在这样一个简单的练习中,它也总是很好的练习。

最简单的打印方法10使用三元运算符,boolean ? 1 : 0只需很少的字符即可。

现在,将您的代码拆分为方法并应用我们拥有的三元运算符:

public static void main(String args[]) {

    System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");
    System.out.println(row(true, true));
    System.out.println(row(true, false));
    System.out.println(row(false, true));
    System.out.println(row(false, false));
}

private static String row(final boolean p, final boolean q) {
    return tabDelimited(p, q) + tabDelimited(p & q, p | q) + tabDelimited(p ^ q, !p);
}

private static String tabDelimited(final boolean a, final boolean b) {
    return (a ? 1 : 0) + "\t" + (b ? 1 : 0) + "\t";
}

稍微好一点你会同意吗?

输出:

P   Q   AND OR  XOR NOT
1   1   1   1   0   0   
1   0   0   1   1   0   
0   1   0   1   1   1   
0   0   0   0   0   1

然后,您可以通过使该tabDelimited方法打印任意数量的booleans 来减少整个代码的硬编码:

public static void main(String args[]) {

    System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");
    System.out.println(row(true, true));
    System.out.println(row(true, false));
    System.out.println(row(false, true));
    System.out.println(row(false, false));
}

private static String row(final boolean p, final boolean q) {
    return tabDelimited(p, q, p & q, p | q, p ^ q, !p);
}

private static String tabDelimited(final boolean... toPrint) {
    if (toPrint.length == 0) {
        return "";
    }
    final StringBuilder sb = new StringBuilder();
    sb.append(toPrint[0] ? 1 : 0);
    for (int i = 1; i < toPrint.length; ++i) {
        sb.append("\t").append(toPrint[i] ? 1 : 0);
    }
    return sb.toString();
}
于 2013-09-03T08:43:01.260 回答
2

重复使用相同的代码。通过将布尔值作为参数传递来创建一个简单的方法。

方法创建

public static void main(String args[])
    {
        System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");

        Sample sample = new Sample();
        sample.display(true, true);
        sample.display(true, false);
        sample.display(false, true);
        sample.display(false, false);

    }

    private void display(boolean p, boolean q)
    {
        System.out.print(p + "\t" + q + "\t");
        System.out.print((p & q) + "\t" + (p | q) + "\t");
        System.out.println((p ^ q) + "\t" + (!p));
    }
于 2013-09-03T07:27:38.353 回答
1

在 Javaboolean中不能转换为int(1 或 0)。看看这个

或者,您可以在此处使用 Apache 的 BooleanUtils

于 2013-09-03T07:27:35.360 回答
0

这个问题似乎是基于意见的。如果您主要关心演示形式,那么恕我直言,最简单的方式就是您在问题中提到的方式->更改pq整数。您只需要将计算 NOT 的方式更改!p为类似1-p1^p因为没有单字节 NOT 运算符。

您的代码可能看起来像

private static void printRow(int p, int q) {
    System.out.print(p + "\t" + q + "\t");
    System.out.print((p & q) + "\t" + (p | q) + "\t");
    System.out.println((p ^ q) + "\t" + (1 - p));
}

public static void main(String args[]) throws Exception {

    System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");

    printRow(1, 1);
    printRow(1, 0);
    printRow(0, 1);
    printRow(0, 0);
}

输出:

P   Q   AND OR  XOR NOT
1   1   1   1   0   0
1   0   0   1   1   0
0   1   0   1   1   1
0   0   0   0   0   1
于 2013-09-03T07:42:24.507 回答
0

我认为这是一种方法,因为在本书的那部分方法中,:? 等,即使尚未涵盖其他内容:

System.out.print(p + "\t" + q + "\t" + (p * q) + "\t");
if(p != q) System.out.println((p + q) + "\t" + (p + q) + "\t" + q);
if((p == q) & (p == 1)) System.out.println(p + "\t0\t0");
if((p == q) & (p == 0)) System.out.println(p + "\t0\t1");
于 2017-03-12T03:17:05.000 回答
0
public class Chapter2 {

    public static void main(String[] args) {
        System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");
        Compare(true ,true);
        Compare(true ,false);
        Compare(false ,true);
        Compare(false ,false);
    }
    static void Compare(boolean p, boolean q) {
        System.out.println((p?0:1) + "\t" + (q?0:1) +"\t"+((p&q)?0:1) + "\t" + 
            ((p|q)?0:1) + "\t" +((p^q)?0:1) + "\t" + ((!p)?0:1));
    }       
}
于 2016-04-16T10:12:38.580 回答