我目前正在研究工作簿Java A入门指南。第2章有一个创建真值表的小项目。显示的值的格式为true或false。目标是显示1和0。

我已经尝试过下面的代码来做到这一点,但是String.valueOf方法不适用于所有表达式。我不知道该怎么做。

package ChapterTwo;

public class LogicalOpTable {
    public static void main(String[] args) {

    boolean p, q;

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

    p = true; q = true;

    String str0 = String.valueOf(p);
    String str1 = String.valueOf(q);

    str0 = true ? "1" : "2";
    str1 = true ? "1" : "2";

    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(str0 + "\t" + str1 +"\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));


    }
}

最佳答案

您在编写此文件时犯了一个错误:

str0 = true ? "1" : "2";
str1 = true ? "1" : "2";


您可能是说:

str0 = (str0 == "true") ? "1" : "2";
str1 = (str1 == "true") ? "1" : "2";


但是您甚至可以更快地执行此操作(并在创建str0str1时删除第一次分配):

str0 = p ? "1" : "2";
str1 = q ? "1" : "2";


编辑:还请注意,如果要更改str0str1的值,则必须重新计算pq。因此,您可能想编写一个子函数,如@DThought回答。

编辑2:子功能可能如下:

static String printBoolean(boolean b) {
    return b ? "1" : "2";
}


并在您的主要代码中使用此功能,如下所示:

System.out.print(printBoolean(p&q) + "\t" + printBoolean(p|q) + "\t");


另请注意,您无需编写相同代码的4次。您可以创建循环以遍历(p,q)的每个值。

10-08 12:42