【问题标题】:Truth Table - Converting boolean value to 1 and 0真值表 - 将布尔值转换为 1 和 0
【发布时间】:2015-10-30 09:52:59
【问题描述】:

我目前正在阅读工作手册 Java A Beginners Guide。第 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));


    }
}

【问题讨论】:

    标签: java binary boolean-logic truthtable


    【解决方案1】:

    你写错了:

    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";
    

    编辑:另外请注意,如果您愿意,在更改 pq 的值时,您必须重新计算 str0str1。所以你可能想写一个@DThought回答的子函数。

    EDIT 2:子函数可能如下:

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

    并在你的主代码中使用这个函数,如下所示:

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

    另外请注意,您不需要编写 4 次相同的代码。您可以创建循环来迭代 (p,q) 的每个值。

    【讨论】:

    • 感谢以上内容,但它没有回答我的问题。您无法计算所有这些表达式中的 str0 和 str1 变量,那么显示 1 和 0 而不是真假的最简单方法是什么?
    【解决方案2】:

    尝试以下方法: 私有静态字符串转换(boolean bool);

    以某种方式设置该方法,它会为您返回“0”和“1”以表示 false 和 true,然后在您打印布尔值的任何地方在您的打印构造中使用该方法。

    【讨论】:

    • 我已经尝试设置一个方法,但我仍然无法正确计算表达式,你能再给我一个例子吗?
    【解决方案3】:

    感谢所有提示和提示,最后我的最终代码如下所示。 我知道可能有更简单的方法可以做到这一点,但本书希望你利用前两章中的所有内容,所以我也包含了一个控制语句。

    如果您认为可以,请投票。

    谢谢 // 试试这个 2-2:逻辑运算符的真值表。 包第二章;

    public class LogicalOpTable {
    public static void main(String[] args) {
    
    boolean p, q;
        int a = 0, b = 0;
    
    System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");
    
    p = true; q = true;
        if(p) a = 1;
        else a = 0;
        if(q) b = 1;
        else b = 0;
        System.out.print(a + "\t" + b +"\t");
        System.out.print(printBoolean(p&q) + "\t" + printBoolean (p|q) + "\t");
        System.out.println(printBoolean2(p^q) + "\t" + printBoolean (!p));
    
    p = true; q = false;
        if(p) a = 1;
        else a = 0;
        if(q) b = 1;
        else b = 0;
        System.out.print(a + "\t" + b +"\t");
        System.out.print(printBoolean(p&q) + "\t" + printBoolean (p|q) + "\t");
        System.out.println(printBoolean2(p^q) + "\t" + printBoolean (!p));
    
    p = false; q = true;
        if(p) a = 1;
        else a = 0;
        if(q) b = 1;
        else b = 0;
        System.out.print(a + "\t" + b +"\t");
        System.out.print(printBoolean(p&q) + "\t" + printBoolean (p|q) + "\t");
        System.out.println(printBoolean2(p^q) + "\t" + printBoolean (!p));
    
    p = false; q = false;
        if(p) a = 1;
        else a = 0;
        if(q) b = 1;
        else b = 0;
        System.out.print(a + "\t" + b +"\t");
        System.out.print(printBoolean(p&q) + "\t" + printBoolean (p|q) + "\t");
        System.out.println(printBoolean2(p^q) + "\t" + printBoolean (!p));
    }
    public static String printBoolean(boolean p) {
        return p ? "1" : "0";
    }
    public static String printBoolean2(boolean q) {
        return q ? "1" : "0";
    }
    }
    

    【讨论】:

    • 你不需要ab 变量。
    • 我不知道我怎么会这么愚蠢。经过长时间的休息后,我现在又回到了这个问题上,并看到了 Gael 的观点。
    【解决方案4】:

    经过长时间的休假,我现在更好地理解了盖尔的评论和答案,我不知道我怎么会这么愚蠢。请参阅下面的更新代码,请支持投票。谢谢,

    package ChapterTwo;
    
     // Try this 2-2: a truth table for the logical operators. 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;
    
    System.out.print(printBoolean(p) + "\t" + (printBoolean2(q)) +"\t");
    System.out.print(printBoolean(p&q) + "\t" + printBoolean (p|q) + "\t");
    System.out.println(printBoolean2(p^q) + "\t" + printBoolean (!p));
    
    p = true; q = false;
    
    System.out.print(printBoolean(p) + "\t" + (printBoolean2(q)) +"\t");
    System.out.print(printBoolean(p&q) + "\t" + printBoolean (p|q) + "\t");
    System.out.println(printBoolean2(p^q) + "\t" + printBoolean (!p));
    
    p = false; q = true;
    
    System.out.print(printBoolean(p) + "\t" + (printBoolean2(q)) +"\t");
    System.out.print(printBoolean(p&q) + "\t" + printBoolean (p|q) + "\t");
    System.out.println(printBoolean2(p^q) + "\t" + printBoolean (!p));
    
    p = false; q = false;
    
    System.out.print(printBoolean(p) + "\t" + (printBoolean2(q)) +"\t");
    System.out.print(printBoolean(p&q) + "\t" + printBoolean (p|q) + "\t");
    System.out.println(printBoolean2(p^q) + "\t" + printBoolean (!p));
    }
    public static String printBoolean(boolean p) {
    return p ? "1" : "0";
    }
    public static String printBoolean2(boolean q) {
        return q ? "1" : "0";
    
        }
    }
    

    【讨论】:

      【解决方案5】:
      public class LogicalOpTabl {
      public static void main(String args[]) {
      
          boolean p, q;
          String a;
      
          System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");
      
          p = true;
          q = true;
          a = ((p ? 1 : 0) + "\t" + (q ? 1 : 0) +"\t" + ((p&q)? 1 : 0) + "\t" + ((p|q)? 1:0) + "\t" + ((p^q)? 1 :0) + "\t" + ((!p)? 1 :0));
          System.out.println(a);
      
          p = true;
          q = false;
          System.out.println((p ? 1 : 0) + "\t" + (q ? 1 : 0) +"\t" + ((p&q)? 1 : 0) + "\t" + ((p|q)? 1:0) + "\t" + ((p^q)? 1 :0) + "\t" + ((!p)? 1 :0));
      
          p = false;
          q = true;
          System.out.println((p ? 1 : 0) + "\t" + (q ? 1 : 0) +"\t" + ((p&q)? 1 : 0) + "\t" + ((p|q)? 1:0) + "\t" + ((p^q)? 1 :0) + "\t" + ((!p)? 1 :0));
      
          p = false;
          q = false;
          System.out.println((p ? 1 : 0) + "\t" + (q ? 1 : 0) +"\t" + ((p&q)? 1 : 0) + "\t" + ((p|q)? 1:0) + "\t" + ((p^q)? 1 :0) + "\t" + ((!p)? 1 :0));
          }
      }
      

      【讨论】:

        【解决方案6】:

        我也在研究那本书,很失望地发现书中或可下载的 Oracle 清单中没有这个问题的答案。

        不管怎样,我是一个程序员的菜鸟。上周刚开始看这本书,完全被这个问题困住了。

        这是我能想到的最好的解决方案,只使用我从书中学到的东西(2-2 问题 6)

        class LogicalOpTable6 {
        public static void main(String args[]) {
            boolean p, q;
        
            System.out.println("P\tQ\tAND\tOR\tXOR\tNOT");
        
            p = true; q = true;
            if(p)
                System.out.print("1" + "\t");
            if(!p)
                System.out.print("0" + "\t");
            if(q)
                System.out.print("1" + "\t");
            if(!q)
                System.out.print("0" + "\t");
            if(p&q)
                System.out.print("1" + "\t");
            if(!(p&q))
                System.out.print("0" + "\t");
            if(p|q)
                System.out.print("1" + "\t");
            if(!(p|q))
                System.out.print("0" + "\t");
            if(p^q)
                System.out.print("1" + "\t");
            if(!(p^q))
                System.out.print("0" + "\t");
            if(!p)
                System.out.println("1");
            if(!(!p))
                System.out.println("0");
        
            /* 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;
            if(p)
                System.out.print("1" + "\t");
            if(!p)
                System.out.print("0" + "\t");
            if(q)
                System.out.print("1" + "\t");
            if(!q)
                System.out.print("0" + "\t");
            if(p&q)
                System.out.print("1" + "\t");
            if(!(p&q))
                System.out.print("0" + "\t");
            if(p|q)
                System.out.print("1" + "\t");
            if(!(p|q))
                System.out.print("0" + "\t");
            if(p^q)
                System.out.print("1" + "\t");
            if(!(p^q))
                System.out.print("0" + "\t");
            if(!p)
                System.out.println("1");
            if(!(!p))
                System.out.println("0");
        
            /* 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;
            if(p)
                System.out.print("1" + "\t");
            if(!p)
                System.out.print("0" + "\t");
            if(q)
                System.out.print("1" + "\t");
            if(!q)
                System.out.print("0" + "\t");
            if(p&q)
                System.out.print("1" + "\t");
            if(!(p&q))
                System.out.print("0" + "\t");
            if(p|q)
                System.out.print("1" + "\t");
            if(!(p|q))
                System.out.print("0" + "\t");
            if(p^q)
                System.out.print("1" + "\t");
            if(!(p^q))
                System.out.print("0" + "\t");
            if(!p)
                System.out.println("1");
            if(!(!p))
                System.out.println("0");
        
            /* 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;
            if(p)
                System.out.print("1" + "\t");
            if(!p)
                System.out.print("0" + "\t");
            if(q)
                System.out.print("1" + "\t");
            if(!q)
                System.out.print("0" + "\t");
            if(p&q)
                System.out.print("1" + "\t");
            if(!(p&q))
                System.out.print("0" + "\t");
            if(p|q)
                System.out.print("1" + "\t");
            if(!(p|q))
                System.out.print("0" + "\t");
            if(p^q)
                System.out.print("1" + "\t");
            if(!(p^q))
                System.out.print("0" + "\t");
            if(!p)
                System.out.println("1");
            if(!(!p))
                System.out.println("0");
        
            /* System.out.print(p + "\t" + q + "\t");
            System.out.print((p&q) + "\t" + (p|q) + "\t");
            System.out.println((p^q) + "\t" + (!p)); */
        }
        

        这是很多行,我很清楚,但是在为真值表的第一行输入 if 语句后,可以将它们复制到其他三行。

        【讨论】:

          【解决方案7】:
          class LogicalOpTable {
                  public static void main(String[] args) {
          
                          System.out.println("P\tQ\tAND\tOR\tXOR\tNOT(P)");
          
                              boolean P, Q;
                      
                     
                          P = true;
                          Q = true;
          
                              if(P) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P&Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P|Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P^Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(!P) {
                                     System.out.print("1\n");
                              }
                              else { System.out.print("0\n");
                              }
                              
                              
                          P = true;
                              Q = false;
                      
                              if(P) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P&Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P|Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P^Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(!P) {
                                     System.out.print("1\n");
                              }
                              else { System.out.print("0\n");
                              }
                              
          
                      P = false;
                              Q = true;
                      
                              if(P) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P&Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P|Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P^Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(!P) {
                                     System.out.print("1\n");
                              }
                              else { System.out.print("0\n");
                              }
                              
          
                          P = false;
                          Q = false;
                      
                              if(P) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P&Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P|Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(P^Q) {
                                     System.out.print("1\t");
                              }
                              else { System.out.print("0\t");
                              }
                              if(!P) {
                                     System.out.print("1\n");
                              }
                              else { System.out.print("0\n");
                              }
          }
          }
          

          【讨论】:

          • 请解释你的答案。
          • 你基本上是在硬编码答案,从练习的角度来看没有多大意义。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-27
          • 1970-01-01
          • 1970-01-01
          • 2011-04-06
          • 2016-02-01
          • 2022-07-28
          • 1970-01-01
          相关资源
          最近更新 更多