'Truth Table - Converting boolean value to 1 and 0

I am currently working through the work book, Java A Beginners Guide. Chapter 2 has a little project to create a truth table. The values that are displayed are in the format of true or false. The goal is to display 1's and 0's instead.

I have tried the below code to do this but the String.valueOf method wont work for all of the expressions. I am out of idea's as to how i can do this.

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


    }
}


Solution 1:[1]

You made a mistake writing this :

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

You probably meant :

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

But you can even do it quicker (and remove first assignation when creating str0 and str1) :

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

EDIT : Also note that you'll have to recompute str0 and str1 when changing values of p or q if you want to. So you might want to write a subfunction as @DThought answered.

EDIT 2 : The subfonction could be the following :

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

And use this function in your main code like this :

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

Also note that you don't need to write 4 times the same piece of code. You could create loops to iterate over each values of (p,q).

Solution 2:[2]

try to make the following method: private static String convert(boolean bool);

set up that method in a way, it'll return you "0" and "1" for false and true, and then use that method in your print constructs at any place, where you're prining out boolean values.

Solution 3:[3]

after a long lay off i now understand Gael,s comment and the answer a lot better, i don't know how i could have been so stupid. Please see updated code below and please up vote back up. Thanks,

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

    }
}

Solution 4:[4]

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));
    }
}

Solution 5:[5]

I am also working through that book and was dissapointed to find that there is no answer to this question in the book or in the Oracle listings that can be downloaded.

Anywho, I am a total programmer noob. Just started with this book last week and totally got stuck on this question.

This is the best solution I could come up with by using only what I learned from the book up to this point (2-2 question 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)); */
}

It's a lot of lines, I'm well aware, but after typing the if statements for row one of the truth table they could be copied for the other three rows.

Solution 6:[6]

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

Solution 7:[7]

I believe this is the solution:

// Try this 2-2: a truth table for the logical operators.
public class Example {
    public static void main(String[] args) {

        int p, q;
        boolean b;

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

        p = 1; q = 1;
        b = 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)+1));

        p = 1; q = 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)+1));

        p = 0; q = 1;
        System.out.print(p + "\t" + q + "\t");
        System.out.print((p&q) + "\t" + (p|q) + "\t");
        System.out.println((p^q) + "\t" + ((p*-p)+1));

        p = 0; q = 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)+1));

    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 DThought
Solution 3 Stephen Worrall
Solution 4 FiReTiTi
Solution 5
Solution 6 Adam Fagan
Solution 7 Voicu