我想知道是否有一种简单的方法可以将这个Java程序的真值和假值转换为1和0而不需要做太多的手工劳动?我想添加数据类型“byte”并有两个单独的变量值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));
}
}
答案 0 :(得分: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));
}
答案 1 :(得分:2)
你有很多代码重复。 从不复制粘贴,始终创建方法。这将使您的代码可读和可维护。即使是像这样的简单练习,也总是很好的做法。
打印1
或0
的最简单方法是使用三元运算符,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
方法打印任意数量的boolean
来使整个批次的硬编码变得不那么简单:
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();
}
答案 2 :(得分:1)
答案 3 :(得分:0)
这个问题似乎是基于意见的。如果您主要关注的是演示形式,那么恕我直言最简单的将是你提到的方式 - &gt;将p
和q
更改为整数。您只需将!p
中的NOT计算方式更改为1-p
或1^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
答案 4 :(得分: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));
}
}
答案 5 :(得分:0)
我认为这是一种方法,因为在本书的那部分方法中,:?等等,即使其他方法尚未涵盖:
{{1}}